2009-10-18 17 views
5

Wszystkim,jQuery.getJSON (url [dane], [callback])

Próbuję pobrać kurs od Google z jQuery $ .getJSON(). Korzystanie z wnioskiem: „http://www.google.com/ig/calculator?hl=en&q=1USD=?CAD

zwraca prosty plik JSON: {lhs: "1 U.S. dollar",rhs: "1.03800015 Canadian dollars",error: "",icc: true}

używam następującą funkcję jquery, aby uzyskać kwotę w dolarach kanadyjskich .:

$(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> 

Ogień błędów wyświetla poprawną JSON plik, ale wskazuje, że używana jest niepoprawna etykieta.

Każda pomoc jest doceniana.

Bob

Odpowiedz

7

Google zwraca czystego JSON i nie obsługuje jsonp (= JSON zawinięte w zwrotnego).

JSONP wygląda następująco:

callbackFunction({json_object: "some_data"}) 

Przeglądarka może załadować jsonp-dane z innych dziedzin jak można go załadować skryptów JavaScript w tagów z innych domen. Czyste dane JSON nie mogą być wykonywane jako JavaScript i dlatego nie można ich załadować wewnątrz znaczników script z innych domen.

W tym konkretnym przypadku Google może uzyskać JSON na iGoogle przy użyciu prostej AJAX (ponieważ jest to ta sama domena), ale nie można zażądać jej z poziomu domeny z poziomu przeglądarki. Możesz jednak przesłać zapytanie na swój serwer, pracować z wynikiem tam i wysłać go do klienta (twój serwer działa jako proxy).

+0

Świetna odpowiedź. Czy możesz rozwinąć różnicę między JSON i JSONP? –

+0

Nick, Czy mogę traktować plik json jako tekst i sam go przeanalizować? Dzięki, Bob –

+0

Hej, Bob, nie możesz uzyskać dostępu do plików z innych serwerów w przeglądarce (te same zasady domeny), jeśli te pliki nie są JavaScript. Jedynym realnym rozwiązaniem jest żądanie ich bezpośrednio z serwera i wysłanie wyniku do przeglądarki. – stefanw

1

Nie sądzę, że kalkulator Google obsługuje JSONP (który jest wymagany w przypadku javascript w wielu domenach). Zwłaszcza twój &jsoncallback=? nic nie robi.

Musisz use a proxy na swoim serwerze.

+0

Dzięki Marcel, Zgadnij, że muszę zacząć używać PHP. Bob –

2

Oprócz problemu z wieloma domenami otrzymane dane są nieprawidłowe JSON. The keys need to be quoted. Myślę, że właśnie dlatego Firebug mówi, że używasz nieprawidłowych etykiet.

// 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}'));