2009-10-18 63 views
5

A todos,jQuery.getJSON (url, [los datos], [callback])

Estoy tratando de recuperar el tipo de cambio de Google con jQuery $ .getJSON(). El uso de la solicitud: "http://www.google.com/ig/calculator?hl=en&q=1USD=?CAD"

devuelve un simple archivo JSON: {lhs: "1 U.S. dollar",rhs: "1.03800015 Canadian dollars",error: "",icc: true}

estoy usando la siguiente función de jQuery para obtener la cantidad en dólares canadienses .:

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

errores fuego muestra la correcta JSON archivo pero indica que se utiliza una etiqueta no válida.

Cualquier ayuda es apreciada.

Bob

Respuesta

7

Google devuelve JSON pura y no soporta JSONP (= JSON envuelto en una devolución de llamada).

JSONP parece:

callbackFunction({json_object: "some_data"}) 

El navegador puede cargar JSONP-datos de otros dominios como puede cargar JavaScript en script-etiquetas de otros dominios. Los datos Pure JSON no se pueden ejecutar como JavaScript y es por eso que no se pueden cargar dentro de las etiquetas de script de otros dominios.

En este caso específico, Google puede obtener el JSON en iGoogle utilizando AJAX simple (porque es el mismo dominio), pero no puede solicitarlo desde su dominio desde el navegador. Sin embargo, puede consultarlo en su servidor, trabajar con el resultado allí y enviarlo al cliente (su servidor actúa como un proxy).

+0

Great answer. ¿Puede explicar la diferencia entre JSON y JSONP? –

+0

Nick, ¿Puedo tratar el archivo json como texto y analizarlo yo mismo? Gracias, Bob –

+0

Hola Bob, no puedes acceder a los archivos de otros servidores en tu navegador (la misma política de dominio) si estos archivos no son JavaScript. La única solución viable es solicitarlos directamente desde su servidor y enviar el resultado al navegador. – stefanw

1

No creo que la calculadora de Google sea compatible con JSONP (que es necesaria para javascript entre dominios). Especialmente su &jsoncallback=? no hace nada.

Necesita use a proxy en su servidor.

+0

Gracias Marcel, Supongo que tengo que empezar a usar PHP. Bob –

2

Además del problema de dominios cruzados, los datos que ha recibido no son JSON válidos. The keys need to be quoted. Creo que es por eso que Firebug te dice que se usan etiquetas no válidas.

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