2010-05-12 10 views
2

Je fais une requête jQuery $.getJSON à un autre domaine, donc je m'assure que mon URI GET se termine par "callback =?" (c'est-à-dire en utilisant JSONP)."étiquette invalide" erreur Firebug avec jQuery getJSON

Le panneau NET de Firebug montre que je reçois les données comme prévu, mais pour une raison quelconque, le panneau de la console enregistre l'erreur suivante: "étiquette invalide". Le JSON valide avec JSONLint, donc je doute qu'il y ait quelque chose de vraiment faux avec la structure des données.

Des idées pour lesquelles je pourrais recevoir cette erreur?

+0

S'il vous plaît nous montrer le Javascript rendu par la demande JSONP. – SLaks

Répondre

3

Il semble que vous utilisiez JSONP dans votre script de serveur.

Lorsque vous recevez une demande avec un paramètre de rappel, vous devez rendre les éléments suivants:

callbackName({ "myName": "myValue"}); 

callbackName est la valeur du paramètre de rappel.

+0

La spécification jQuery permet "callback =?" lors de l'utilisation de jQuery.getJSON. Cela enveloppe la réponse dans une fonction de rappel. – jerome

+1

@jerome: Oui, mais votre script côté serveur doit le supporter. JSONP n'est pas magique. – SLaks

+0

merci pour votre perspicacité à ce sujet. Si vous avez un moment, voir les liens ci-dessous pour mon cas de test. Je n'ai pas encore assez d'informations pour savoir pourquoi la requête inter-domaines ne me permet pas d'utiliser les données. http://www.thespacebetweenthewords.org/json_test/test_jsonp_request.html Une demande est adressée à un autre domaine. erreur "étiquette invalide" dans Firebug, et incapable d'utiliser les données. http://www.globaloperative.info/json_test/test_json_request.html Une requête est faite au même domaine.Les données sont récupérées et évaluées correctement. – jerome

11

C'est un ancien poste, mais je suis quand même d'envoyer un commentaire:

Supposons que vous voulez obtenir le code JSON généré par le fichier suivant, « get_json_code.php »:

<?php 
$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5); 
echo json_encode($arr); 
?> 

Comme vous l'avez mentionné, $ .getJSON() utilise JSONP lorsque vous ajoutez un "jsoncallback =?" paramètre à la chaîne de l'URL requise. Par exemple:

$.getJSON("http://mysite.com/get_json_code.php?jsoncallback=?", function(data){ 
    alert(data); 
}); 

Cependant, dans ce cas, vous obtiendrez un message « label non valide » dans Firebug parce que le fichier « get_json_code.php » ne fournit pas une variable de référence valable pour contenir la chaîne JSON retournée. Pour résoudre ce problème, vous devez ajouter le code suivant au fichier « get_json_code.php »:

<?php 
$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5); 
echo $_GET['jsoncallback'].'('.json_encode($arr).')'; //assign resulting code to $_GET['jsoncallback]. 
?> 

De cette façon, le code JSON résultant sera ajouté à la « jsoncallback » GET variable.

En conclusion, le "jsoncallback =?" paramètre dans l'URL $ .getJSON() fait deux choses: 1) il définit la fonction pour utiliser JSONP au lieu de JSON et 2) spécifie la variable qui contiendra le code JSON extrait du fichier "get_json_code.php". Vous avez seulement besoin de vous assurer qu'ils ont le même nom.

Espérons que cela aide,

Vq.

+1

Vraiment merci pour votre réponse ancienne mais valable. Je n'ai pas vu ça dans les docs! –