jQuery.getJSON (url, , )

À tous,

J’essaye de récupérer le taux de change de Google avec $ .getJSON () de jQuery. Utilisation de la requête: ” http://www.google.com/ig/calculator?hl=en&q=1USD=?CAD

renvoie un fichier JSON simple: {lhs: "1 US dollar",rhs: "1.03800015 Canadian dollars",error: "",icc: true}

J’utilise la fonction jQuery suivante pour obtenir le montant en dollars canadiens:

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

Fire bug affiche le fichier JSON correct mais indique qu’une étiquette non valide est utilisée.

Toute aide est appréciée.

Bob

Google renvoie du JSON pur et ne prend pas en charge JSONP (= JSON encapsulé dans un rappel).

JSONP ressemble à:

 callbackFunction({json_object: "some_data"}) 

Le navigateur peut charger des données JSONP à partir d’autres domaines, de même qu’il peut charger JavaScript dans des balises de script d’autres domaines. Les données JSON pures ne peuvent pas être exécutées en tant que JavaScript et c’est pourquoi elles ne peuvent pas être chargées dans des balises de script provenant d’autres domaines.

Dans ce cas spécifique, Google peut obtenir le fichier JSON sur iGoogle en utilisant un simple AJAX (car il s’agit du même domaine), mais vous ne pouvez pas le demander à partir de votre domaine depuis le navigateur. Vous pouvez toutefois l’interroger sur votre serveur, y travailler avec le résultat et l’envoyer au client (votre serveur jouant le rôle de proxy).

En plus du problème inter-domaines, les données que vous avez reçues ne sont pas du code JSON valide. Les clés doivent être citées . Je pense que c’est pourquoi Firebug vous dit que des étiquettes non valides sont utilisées.

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

Je ne pense pas que la calculasortingce Google prenne en charge JSONP (requirejs pour le javascript entre domaines). Surtout votre &jsoncallback=? ne fait rien.

Vous devez utiliser un proxy sur votre serveur.