jQuery .getJSON Firefox 3 Erreur de syntaxe non définie
J'obtiens une erreur de syntaxe (undefined ligne 1 test.js) dans Firefox 3 lorsque j'exécute ce code. L'alerte fonctionne correctement (il affiche "travail"), mais je n'ai aucune idée de pourquoi je reçois l'erreur de syntaxe.
jQuery code:
$.getJSON("json/test.js", function(data) {
alert(data[0].test);
});
test.js:
[{"test": "work"}]
Des idées? Je suis en train de travailler sur ce pour une plus grande .fichier js mais j'ai rétréci vers le bas à ce code. Ce qui est fou, c'est que si je remplace le fichier local avec un chemin d'accès à distance il n'y a pas d'erreur de syntaxe (voici un exemple):
source d'informationauteur Mike
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé une solution sur un coup de pied d'erreur
Maintenant l'explication:
Dans firefox 3 (et j'asume seulement firefox TROIS) chaque fichier qui a le type mime "text/xml" est analysée de la syntaxe et de contrôle. Si vous démarrez votre JSON avec un " [ " , il déclenche une Erreur de Syntaxe, si elle commence par "{" c'est un "mal formé Erreur" (ma traduction de "nicht wohlgeformt").
Si je accéder à mon json fichier à partir d'un script local - pas de serveur est inclus dans ce progrès - je remplacer le mime-type... Peut-être que vous définissez votre Type MIME pour que le fichier de mal...
Comment jamais, l'ajout de ce petit bout de code va vous sauver d'un message d'erreur
Edit: En jquery 1.5.1 ou une version ultérieure, vous pouvez utiliser le type mime option pour obtenir le même effet. Pour la définir comme valeur par défaut pour toutes les demandes, utilisez
Vous pouvez également l'utiliser avec $.ajax directement, c'est à dire, vos appels se traduit par
getJSON peut-être en insistant sur au moins un nom:la valeur de la paire.
A droite de la matrice de
["item0","item1","Item2"]
est JSON valide, mais il n'y a rien de référence en fonction de rappel pour getJSON.Dans ce petit tableau des codes postaux:
... J'ai été bloqué jusqu'à ce que j'ai ajouté de l' {"result": tag. Par la suite je pourrais référence:
... J'ai aussi trouvé que c'était juste plus facile à utiliser $.chacun().
Cela peut paraître vraiment stupide, mais changer l'extension du fichier pour test.js partir de .js .txt. J'ai eu la même chose se produire avec parfaitement JSON valide fichiers de données avec assez bien de toute extension de l'exception .txt (exemple: .en json .i18n). Depuis que j'ai changé l'extension, je reçois les données et de les utiliser correctement.
Comme je l'ai dit, cela peut paraître stupide, mais il a travaillé pour moi.
HI
J'ai ce même message d'erreur lors du test de la page web sur mon PC local, mais une fois qu'il est en place sur le serveur d'hébergement de l'erreur ne se produit plus. Désolé, je n'ai aucune idée de la raison, mais il pense qu'il peut aider quelqu'un d'autre de la piste en bas de la raison
Essayez de renommer "test.js" afin de "tester.json", ce qui est Wikipedia dit est l'extension officielle pour des fichiers JSON. C'est peut-être en cours de traitement en Javascript à un certain point.
Avez-vous essayé de désactiver toutes les extensions Firefox?
Je reçois habituellement de quelques erreurs dans la console de Firebug qui sont causées par les extensions, pas par les toiles d'être visité.
Vérifiez si il y a
;
à la fin de latest.js
. jQuery exécuteeval("(" + data + ")")
et point-virgule serait d'empêcher Firefox de trouver parenthèse fermante. Et il pourrait y avoir quelques autres caractères invisibles qui l'empêche de le faire.Je peux vous dire pourquoi de cette distance de travail de l'emplacement du bien, c'est parce que c'est exécutée de manière complètement différente. Depuis qu'il a
jsoncallback=?
que la partie des paramètres de la requête, jQuery réfléchit comme JSONP et en fait il insère dans les DOM à l'intérieur de<script>
balises. Essayez d'utiliser"json/test.js?callback=?"
en tant que cible, il peut aider trop.Quel type de serveur web exécutez-vous que? Une fois, j'ai eu un problème de lecture d'un fichier JSON sur IIS parce qu'il n'était pas définie comme valide de type MIME.
Essayer de configurer le type de contenu de la .fichier js. Firefox s'attend à être, text/plain, apparemment. Vous pouvez faire en tant que Peter Hoffmann ne ci-dessus, ou vous pouvez définir le type de contenu de l'en-tête côté serveur.
Cela pourrait signifier un serveur-côté de changement de configuration (comme apache mime.types de fichiers), ou si le json est servi à partir d'un script, le réglage du type de contenu d'en-tête dans le script.
Ou au moins qui semble avoir fait l'erreur d'aller loin pour moi.
J'ai eu un problème similaire, mais a été une boucle dans une boucle for. Je pense que le problème pourrait être que l'index est hors limite.
Pour les gens qui n'utilisent pas de jQuery, vous devez appeler la
overrideMimeType
méthode avant d'envoyer la requête: