2009-10-18 19 views
5

A tutti,jQuery.getJSON (url, [i dati], [callback])

sto cercando di recuperare il tasso di cambio da Google con jQuery $ GetJSON(). Utilizzando la richiesta: "http://www.google.com/ig/calculator?hl=en&q=1USD=?CAD"

restituisce un semplice file JSON: {lhs: "1 U.S. dollar",rhs: "1.03800015 Canadian dollars",error: "",icc: true}

Sto usando la seguente funzione jquery per ottenere la quantità dollaro canadese .:

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

Fuoco bug visualizza il corretto JSON file ma indica che viene utilizzata un'etichetta non valida.

Qualsiasi aiuto è apprezzato.

Bob

risposta

7

Google restituisce JSON pura e non supporta JSONP (= JSON avvolta in un callback).

JSONP assomiglia:

callbackFunction({json_object: "some_data"}) 

Il browser può caricare JSONP-dati da altri domini come esso può caricare JavaScript script-tag di altri domini. I dati JSON puri non possono essere eseguiti come JavaScript ed è per questo che non può essere caricato all'interno di tag di script da altri domini.

In questo caso specifico, Google può ottenere il JSON su iGoogle utilizzando semplicemente AJAX (perché è lo stesso dominio), ma non è possibile richiederlo dal proprio dominio all'interno del browser. Tuttavia, è possibile interrogarlo sul server, utilizzare il risultato e inviarlo al client (il server funge da proxy).

+0

Ottima risposta. Puoi approfondire la differenza tra JSON e JSONP? –

+0

Nick, Posso trattare il file JSON come testo e analizzarlo da solo? Grazie, Bob –

+0

Bob Bob, non è possibile accedere ai file da altri server nel proprio browser (stesso criterio di dominio) se questi file non sono JavaScript. L'unica soluzione praticabile è quella di richiederli direttamente dal tuo server e inviare il risultato al browser. – stefanw

1

Non penso che la calcolatrice di Google supporti JSONP (che è richiesto per javascript tra domini). Soprattutto il tuo &jsoncallback=? non fa nulla.

È necessario use a proxy sul server.

+0

Grazie Marcel, sa che devo iniziare a utilizzare PHP. Bob –

2

Oltre al problema tra domini, i dati ricevuti non sono JSON validi. The keys need to be quoted. Penso che sia per questo che Firebug ti dice che vengono usate etichette non valide.

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