Une approche que j'aime utiliser est de remplir / envelopper le json avec un littéral objet, puis d'enregistrer le fichier avec une extension de fichier .jsonp. Cette méthode laisse également votre fichier json d'origine (test.json) inchangé, car vous allez plutôt travailler avec le nouveau fichier jsonp (test.jsonp). Le nom sur l'encapsuleur peut être n'importe quoi, mais il doit être le même nom que la fonction de rappel que vous utilisez pour traiter le jsonp. Je vais utiliser votre test.json publié comme exemple pour montrer l'ajout de wrapper jsonp pour le fichier 'test.jsonp'.
json_callback({"a" : "b", "c" : "d"});
Ensuite, créez une variable réutilisable avec une portée globale dans votre script pour contenir le JSON renvoyé. Cela rendra les données JSON renvoyées disponibles pour toutes les autres fonctions de votre script au lieu de la fonction de rappel uniquement.
var myJSON;
Vient ensuite une fonction simple pour récupérer votre json par injection de script. Notez que nous ne pouvons pas utiliser jQuery ici pour ajouter le script à l'en-tête du document, car IE ne prend pas en charge la méthode jQuery .append. La méthode jQuery commentée dans le code ci-dessous fonctionnera sur d'autres navigateurs qui prennent en charge la méthode .append. Il est inclus comme référence pour montrer la différence.
function getLocalJSON(json_url){
var json_script = document.createElement('script');
json_script.type = 'text/javascript';
json_script.src = json_url;
json_script.id = 'json_script';
document.getElementsByTagName('head')[0].appendChild(json_script);
// $('head')[0].append(json_script); DOES NOT WORK in IE (.append method not supported)
}
Vient ensuite une fonction de rappel courte et simple (avec le même nom que l'encapsuleur jsonp) pour obtenir les données de résultats json dans la variable globale.
function json_callback(response){
myJSON = response; // Clone response JSON to myJSON object
$('#json_script').remove(); // Remove json_script from the document
}
Les données json sont désormais accessibles par toutes les fonctions du script en utilisant la notation par points. Par exemple:
console.log(myJSON.a); // Outputs 'b' to console
console.log(myJSON.c); // Outputs 'd' to console
Cette méthode peut être un peu différente de ce que vous avez l'habitude de voir, mais présente de nombreux avantages. Tout d'abord, le même fichier jsonp peut être chargé localement ou à partir d'un serveur en utilisant les mêmes fonctions. En prime, jsonp est déjà dans un format compatible avec plusieurs domaines et peut également être facilement utilisé avec les API de type REST.
Certes, il n'y a pas de fonctions de gestion des erreurs, mais pourquoi en auriez-vous besoin? Si vous ne parvenez pas à obtenir les données json en utilisant cette méthode, alors vous pouvez à peu près parier que vous avez des problèmes avec le json lui-même, et je le vérifierais sur un bon validateur JSON.
JSON
chaîne, vous récupérez déjà un objet javascript, pas besoin de l'utilisereval()
.