2009-10-18 9 views
5

Um all,jQuery.getJSON (url, [Daten], [Rückruf])

Ich versuche, den Wechselkurs von Google mit jQuery $ .getJSON() abgerufen werden. Mit Hilfe der Anfrage: "http://www.google.com/ig/calculator?hl=en&q=1USD=?CAD"

gibt eine einfache JSON-Datei: {lhs: "1 U.S. dollar",rhs: "1.03800015 Canadian dollars",error: "",icc: true}

ich folgende Jquery Funktion bin mit dem kanadischen Dollar-Betrag zu erhalten .:

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

Feuer Bug zeigt die korrekte JSON Datei gibt jedoch an, dass ein ungültiges Label verwendet wird.

Jede Hilfe wird geschätzt.

Bob

Antwort

7

Google liefert reine JSON und nicht unterstützt JSONP (= JSON in einen Rückruf verpackt).

JSONP wie folgt aussehen:

callbackFunction({json_object: "some_data"}) 

Der Browser kann JSONP-Daten aus anderen Domänen laden, wie es JavaScript in Script-Tags aus anderen Domänen laden kann. Reine JSON-Daten können nicht als JavaScript ausgeführt werden, weshalb sie nicht in Skript-Tags anderer Domänen geladen werden können.

In diesem speziellen Fall kann Google den JSON in iGoogle mithilfe von einfachem AJAX abrufen (da es sich um die gleiche Domäne handelt). Sie können ihn jedoch nicht innerhalb des Browsers von Ihrer Domain anfordern. Sie können es jedoch auf Ihrem Server abfragen, mit dem Ergebnis arbeiten und es an den Client senden (Ihr Server fungiert als Proxy).

+0

Große Antwort. Können Sie den Unterschied zwischen JSON und JSONP näher erläutern? –

+0

Nick, Kann ich die JSON-Datei als Text behandeln und selbst analysieren? Danke, Bob –

+0

Hey Bob, Sie können nicht auf Dateien von anderen Servern in Ihrem Browser zugreifen (gleiche Domänenrichtlinie), wenn diese Dateien kein JavaScript sind. Die einzige praktikable Lösung besteht darin, sie direkt von Ihrem Server anzufordern und das Ergebnis an den Browser zu senden. – stefanw

1

Ich glaube nicht Google Rechner unterstützt (die für domainübergreifendes JavaScript erforderlich ist). Vor allem Ihre &jsoncallback=? macht nichts.

Sie müssen use a proxy auf Ihrem Server.

+0

Danke Marcel, Ich denke, ich muss anfangen mit PHP. Bob –

2

Zusätzlich zu dem domänenübergreifenden Problem sind die empfangenen Daten keine gültigen JSON-Daten. The keys need to be quoted. Ich glaube, das ist der Grund, warum Firebug sagt, dass ungültige Labels verwendet werden.

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