2009-10-18 25 views
5

Để tất cả,jQuery.getJSON (url, [dữ liệu], [gọi lại])

Tôi đang cố truy xuất tỷ giá hối đoái từ Google với $ .getJSON() của jQuery. Sử dụng yêu cầu: "http://www.google.com/ig/calculator?hl=en&q=1USD=?CAD"

trả về một tập tin JSON đơn giản: {lhs: "1 U.S. dollar",rhs: "1.03800015 Canadian dollars",error: "",icc: true}

Tôi đang sử dụng các chức năng jquery sau đây để có được số tiền đô la Canada .:

$(document).ready(function(){ 
    $.getJSON("http://www.google.com/ig/calculator?hl=en&q=1USD=?CAD?&label=rhs&format=json&jsoncallback=?", 
       function(data){ 
        alert(data); 
       }); 
}); 
</script> 

lỗi cháy hiển thị đúng JSON tệp nhưng chỉ ra rằng một nhãn không hợp lệ được sử dụng.

Mọi trợ giúp đều được đánh giá cao.

Bob

Trả lời

7

Google trả về JSON tinh khiết và không hỗ trợ JSONP (= JSON bọc trong một callback).

JSONP trông giống như:

callbackFunction({json_object: "some_data"}) 

Trình duyệt có thể tải JSONP-Dữ liệu từ các lĩnh vực khác như nó có thể nạp JavaScript trong kịch bản-thẻ từ các lĩnh vực khác. Dữ liệu JSON thuần túy không thể được thực thi dưới dạng JavaScript và đó là lý do tại sao không thể tải dữ liệu bên trong thẻ tập lệnh từ các miền khác.

Trong trường hợp cụ thể này, Google có thể lấy JSON trên iGoogle bằng cách sử dụng AJAX đơn giản (vì nó là cùng một tên miền), nhưng bạn không thể yêu cầu nó từ miền của bạn từ bên trong trình duyệt. Bạn có thể, tuy nhiên, truy vấn nó trên máy chủ của bạn, làm việc với kết quả ở đó và gửi nó cho khách hàng (máy chủ của bạn hoạt động như một proxy).

+0

Câu trả lời hay. Bạn có thể giải thích về sự khác biệt giữa JSON và JSONP không? –

+0

Nick, Tôi có thể xử lý tệp json dưới dạng văn bản và phân tích cú pháp không? Cảm ơn, Bob –

+0

Xin chào Bob, bạn không thể truy cập tệp từ các máy chủ khác trong trình duyệt của mình (chính sách tên miền) nếu các tệp này không phải là JavaScript. Giải pháp khả thi duy nhất là yêu cầu chúng trực tiếp từ máy chủ của bạn và gửi kết quả đến trình duyệt. – stefanw

1

Tôi không nghĩ rằng máy tính Google hỗ trợ JSONP (bắt buộc đối với javascript trên nhiều miền). Đặc biệt là &jsoncallback=? của bạn không làm gì cả.

Bạn cần phải use a proxy trên máy chủ của mình.

+0

Cảm ơn Marcel, Tôi phải bắt đầu sử dụng PHP. Bob –

2

Ngoài vấn đề tên miền chéo, dữ liệu bạn nhận được không phải là JSON hợp lệ. The keys need to be quoted. Tôi nghĩ đó là lý do tại sao Firebug cho bạn biết các nhãn không hợp lệ được sử dụng.

// this fails 
jQuery.parseJSON('{lhs: "1 U.S. dollar", rhs: "1.03800015 Canadian dollars", error: "", icc: true}')); 

// this works 
jQuery.parseJSON('{"lhs": "1 U.S. dollar", "rhs": "1.03800015 Canadian dollars", "error": "", "icc": true}')); 
Các vấn đề liên quan