Erreur "non bien formée" dans Firefox lors du chargement du fichier JSON avec XMLHttpRequest

Je reçois une erreur "non bien formée" dans la console d'erreur de Firefox 3.0.7 lorsque le JavaScript sur ma page charge un fichier texte contenant un objet dans le format de notation d'objet JavaScript. Si le fichier ne contient que l'objet JSON, il produit l'erreur. Si j'enroule l'objet dans les balises <document> </ document>, il ne produit pas l'erreur. La demande réussit de l'une ou l'autre manière, donc je pourrais simplement l'ignorer, mais je ne veux pas que mon journal des erreurs remplisse ces messages.

Voici un exemple de code pour illustrer le problème. Tout d'abord, le fichier «non bien formé» appelé «data.json»:

  • Demande de CORS de Firefox donnant une "demande d'origine croisée bloquée" en dépit des en-têtes
  • Le bouton Greasemonkey \ JavaScript Copy to Presse-papiers
  • HTML5 glisser et déposer la détection de dossier dans firefox. Est-ce même possible?
  • Cross Domain JavaScript paramètre de localisation par défaut firefox error
  • Répondre aux événements clés de la barre d'adresse dans Firefox Add-on
  • Firefox ne reconnait-il pas table.cells?
  • { a: 3 } 

    Maintenant, un code pour charger le fichier:

     var req = new XMLHttpRequest(); req.open("GET", "data.json"); req.send(null); 

    Ce qui produit l'erreur suivante dans la console d'erreur Firefox:

    Pas bien formé
    Fichier: //path/to/data.json Ligne: 1
    {A: 3}
    – ^

    Si data.json est modifié à ceci:

     <document>{ a: 3 }</document> 

    Il n'y a pas d'erreur. J'ai supposé qu'il se plaignait parce que le fichier JSON simple n'est pas un document XML bien formé, alors j'ai essayé de renverser le type MIME avant l'appel "envoyer" pour le forcer à charger en tant que texte brut, mais cela ne fonctionnait pas.

     var req = new XMLHttpRequest(); req.open("GET", "data.json"); req.overrideMimeType("text/plain"); req.send(null); // Still produces an error! 

    Je vais continuer à envelopper mes données JSON dans un document XML pour contourner la validation du XMLHttpRequest, mais j'aimerais savoir s'il y a un moyen de le forcer à simplement charger du texte sans critique sans essayer de Validez-le. Alternativement, existe-t-il une autre méthode de chargement de données en plus de XMLHttpRequest qui peut être utilisé avec du texte brut?

  • Comment puis-je effacer ce setInterval
  • Comment effectuer une recherche et un filtre en temps réel sur une table HTML
  • Est un point dans un chemin fermé - SVG Javascript
  • Répondre aux événements clés de la barre d'adresse dans Firefox Add-on
  • Javascript - détecte la touche ctrl enfoncée ou enfoncée, l'événement de la touche ne déclenche pas
  • JQuery anime le travail en violon mais pas en ligne
  • 7 Solutions collect form web for “Erreur "non bien formée" dans Firefox lors du chargement du fichier JSON avec XMLHttpRequest”

    Avez-vous essayé d'utiliser le type MIME pour JSON?

     application/json 

    Vous pouvez également configurer votre serveur pour envoyer ce type MIME automatiquement pour les fichiers .json.

    Tout d'abord, la vraie JSON est beaucoup plus stricte que JavaScript, et pour être JSON valide, vous devez avoir vos clés citées.

      { "a": 3 } 

    En outre, comme vous utilisez un XMLHttpRequest nu, qui s'attend généralement à recevoir un résultat XML, sauf si les en-têtes MIME spécifient strictement autrement.

    Vous voudrez peut-être faciliter votre vie en utilisant simplement un framework JavaScript tel que jQuery, qui résoudra tout ce problème pour vous et traiterez tous les cas de mauvaise qualité.

     $.getJSON("data.json",{}, function( data ){ /* # do stuff here */ }); 

    En outre, si vous utilisez à la fois JSON strict et utilisez une bibliothèque pour l'abstraire pour vous, lorsque les navigateurs commencent à avoir des analyseurs JSON natifs, la bibliothèque pourra les utiliser de manière transparente et obtenir une amélioration significative de la vitesse.

    (Il est prévu que cela se produira plus tôt que tard, et quand cela se produira, vos utilisateurs obtiendront une mise à niveau silencieuse sans effort!).

    Cela se produit également lorsque Content-Type est complètement vide (contournant ainsi la détection de type naturel).

    Il devrait être {"a": 3} en fait.

    J'ai trouvé le même message d'erreur mais d'une cause très différente. Après un petit moment de changement infructueux du contenu de JSON, j'ai réalisé que j'avais réinitialisé la page en cours d'exécution sur le système de fichiers local (fichier: //Users/me/Sites/mypage.html) plutôt que sur le serveur (http: // localhost / ~ Me / Sites / mypage.html).

    J'avais également le même message d'avertissement avec XMLHttpRequest() (dans FireFox), lors de la demande de ressources marquées comme Content-Type: application/json par le serveur.

    Qu'est-ce que l'astuce pour moi était de définir explicitement la propriété XMLHttpRequest.responseType à json sur l'objet de demande. Par exemple,

     var request = new XMLHttpRequest(); request.onreadystatechange = function() { ... } ... request.open('GET','https://random-domain.com/random-path',true); request.responseType = 'json'; ... request.send(); 

    Kent, je ne suis pas d'accord.

    Le suivant est "valide" JSON:

     { a: 3 } 

    Les noms de propriété d'objet JavaScript ne doivent PAS être des chaînes.

    Le problème est celui du type MIME, pas la syntaxe JSON / JavaScript.

    Je viens de résoudre ce problème en ajoutant json comme "text / javascript" à mon fichier de type mime de serveur web:

     text/javascript js, json 

    L'erreur «non bien formée» a disparu. Le navigateur (FireFox) supposait, de façon incorrecte, que le fichier .json était XML.

    JavaScript rend le site Web intelligent, beauté et facile à utiliser.