2010-03-03 6 views
12

Tôi đang cố triển khai một yêu cầu đơn giản tới API của Wikipedia bằng AJAX (XMLHttpRequest). Nếu tôi gõ url vào thanh địa chỉ của Firefox, tôi nhận được một XML gọn gàng, không có mồ hôi ở đó. Tuy nhiên, hãy gọi cùng một url chính xác với:Truy vấn API của Wikipedia bằng AJAX (XMLHttpRequest)

// this is my XMLHttpRequest object 
httpObjectMain.open("GET", "http://en.wikipedia.org/w/api.php?action=query&format=xml&prop=langlinks&lllimit=500&titles=kaas", true); 
httpObjectMain.send(null); 

trả về một phản hồi trống. Theo FireBug, tôi nhận được phản hồi 200 OK, nhưng nội dung chỉ trống.

Tôi nghi ngờ tôi có thể thiếu thứ gì đó trên tiêu đề của yêu cầu GET http.

Trợ giúp! (và cảm ơn!)

Trả lời

17

The Wikipedia API không hỗ trợ JSONP. truy vấn của bạn string'll trở thành một cái gì đó như thế này:

http://en.wikipedia.org/w/api.php?action=query&format=json&callback=test&prop=langlinks&lllimit=500&titles=kaas 

Nhưng bạn sẽ phải xây dựng các handler jsonp (hoặc bạn có thể sử dụng thư viện yêu thích của bạn để làm điều đó), chuyển sang định dạng đầu ra json từ xml bạn chọn và tạo chức năng gọi lại để phân tích cú pháp kết quả và thực hiện công cụ bạn cần trên trang.

+0

Cảm ơn, điều này nghe như một con đường để khám phá. –

+0

Hãy nhớ rằng với JSONP về mặt kỹ thuật bạn không sử dụng XMLHttpRequest nhưng là một kỹ thuật tiêm tập lệnh. –

+0

Đã làm việc cho tôi! Phân tích cú pháp JSON trả về là một cuộc phiêu lưu khác, nhưng dữ liệu đã được trả lại tốt. –

-1

Trình duyệt sẽ không cho phép bạn gửi XHR đến một miền khác ngoài tên miền đang bật. Đây là vì mục đích bảo mật.

Một cách xung quanh điều này mà tôi đã thấy là thiết lập proxy trên tên miền được lưu trữ trên đó sẽ chuyển yêu cầu đến máy chủ api thực tế. Xem http://ajaxpatterns.org/Cross-Domain_Proxy