Question

Quel est le meilleur moyen de signaler une erreur de syntaxe lorsque je charge un flux JSON avec jQuery? Je peux établir les paramètres de rapport d'erreur comme ceci:

error: function(xhr){
    alert('Request Status: ' + xhr.status + ' Status Text: ' + xhr.statusText + ' ' + xhr.responseText);
}

Cependant, cette fonction ne se déclenche pas lorsque l'URL que j'ai appelée charge une page valide (bien qu'aucune ne contienne un objet JSON). De plus, je ne peux pas vérifier les données qu’elles renvoient car (selon Firebug au moins) jQuery.getJSON rompt à l’erreur de syntaxe avant de transmettre l’objet à la fonction qui l’exécute.

Si je souhaite signaler des erreurs, c’est parce que c’est ma façon de vérifier si l’utilisateur a fourni une URL qui générera un flux JSON valide.

Voici une réponse qui nécessite un contrôle sur les réponses du serveur. avec . Voici l'erreur de syntaxe que Firebug me donne L'erreur de syntaxe que Firebug m'a donnée est http://img.skitch.com/20090623-8c97g47j8mnhk / a>

Des idées? Merci

Était-ce utile?

La solution 2

Merci à tous ceux qui ont répondu. Comme j'appelais un flux JSON depuis un domaine externe, je ne pouvais pas simplement utiliser la fonctionnalité AJAX de jQuery et extraire le flux sous forme de "texte". au lieu de "json". jQuery vous permet seulement de tirer "json". et " script " depuis une source distante.

Au lieu de cela, j’ai fini par écrire un script PHP pour passer l’appel externe qui vivait sur mon propre serveur. J'utilise jQuery AJAX pour appeler cela, passe la source demandée dans l'URL, puis saisis cela sous forme de "texte". J'exécute ensuite mon propre contrôle pour m'assurer que le format JSON est correctement formaté, puis l'analyse avec une autre bibliothèque. jQuery n'a pas la capacité d'analyser JSON pour le moment; $ .getJSON ne fonctionne que si vous lui passez une URL.

Autres conseils

Vous pouvez lier une fonction à des événements globaux ajaxerror

$(document).ajaxError(function(event, request, ajaxOptions, thrownError){
  if ( 4==request.readyState) { // failed after data has received
    alert(ajaxOptions['url'] + " did not return valid json data");
  }
  else {
    alert("something else wnet wrong");
  }
});
ou utilisez $ .ajax () au lieu de $ .getJSON ()
function foo() {
  // $.getJSON("http://localhost/test.txt", function(data){});
  $.ajax({
    type: "GET",
    url: "http://localhost/test.txt",
    success: function (data, textStatus) {
      alert("succuess");
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
      alert("request failed: " + textStatus);
    },
    dataType: "json"
  });
}

modifier: Mais gardez à l'esprit que les deux ajax (dataType: " ; json ") et getJSON () (qui invoque simplement .ajax (dataType: "json") se résume à data = window ["eval"] ("((" + + data + ")") ... cela pourrait ne pas soyez ce que vous voulez si vous ne savez pas quelles données (arbitraires) votre script demande. Cela pourrait expliquer pourquoi firebug intercepte une erreur de syntaxe lorsque vous le chargez d'un document html au lieu de données json.
Dans ce cas, meilleure demande dataType: & string; string " et exécutez les données à travers un libraire json parser à part entière.

Appelez l'URL ou la demande XHR directement dans la barre d'adresse de votre navigateur, créez une source d'affichage et collez le résultat dans un IDE comprenant le langage JavaScript. Vous remarquerez probablement une citation égarée ou quelque chose du genre.

Au moins, vous pourrez en supprimer des fragments jusqu'à ce que vous trouviez la syntaxe incriminée, si rien d'autre.

En ajoutant à la réponse de Diodeus, collez votre code JSON potentiellement offensant dans cet outil: http: //jsonformatter.curiousconcept. com /

Si vous avez Firebug, vous pourrez même trouver un moyen d'utiliser le service par site par programmation, bien que cela puisse être mal vu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top