Il semble très gênant que de jQuery $.getJSON
silencieusement échoue lorsque les données retournées ne sont pas JSON valide. Pourquoi en était-il mis en œuvre avec le silence de l'échec? Quel est le moyen le plus facile pour effectuer des getJSON avec un meilleur comportement d'échec (par exemple, lancer une exception, console.log()
, ou quoi que ce soit)?
Réponses
Trop de publicités?vous pouvez utiliser
function name() {
$.getJSON("", function(d) {
alert("success");
}).done(function(d) {
alert("success");
}).fail(function(d) {
alert("error");
}).always(function(d) {
alert("complete");
});
}
Si vous voulez voir la cause de l'erreur, utilisez la version complète
function name() {
$.getJSON("", function(d) {
alert("success");
}).fail( function(d, textStatus, error) {
console.error("getJSON failed, status: " + textStatus + ", error: "+error)
});
}
Si votre JSON n'est pas bien formé, vous verrez quelque chose comme
getJSON failed, status: parsererror, error: SyntaxError: JSON Parse error: Unrecognized token '/'
Si l'URL est fausse, vous verrez quelque chose comme
getJSON failed, status: error, error: Not Found
Si vous essayez d'obtenir JSON à partir d'un autre domaine, en violation de la politique de " Même origine, cette approche renvoie un message vide. Notez que vous pouvez travailler autour de la Même origine en utilisant le JSONP (qui a ses limites) ou la méthode préférée de Cross-origin Resource sharing (SCRO).
Directement à partir de la documentation:
Important: Comme de jQuery 1.4, si le fichier JSON contient une erreur de syntaxe, la demande est généralement silencieuse.
Comme la page de documentation dit, getJSON est tout simplement une méthode abrégée pour
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback
});
Pour obtenir de comportement d'échec, vous pouvez utiliser $.ajax comme ceci:
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback,
error: another callback
});
Vous pouvez utiliser $.ajax
au lieu de cela, et de définir l' dataType
les options "json". À partir de la documentation:
"json": Évalue la réponse JSON et retourne un objet JavaScript. Dans jQuery 1.4 les données JSON est analysé dans manière stricte; tout JSON est mal formé rejeté et une erreur d'analyse s'est levée. (Voir json.org pour plus d'informations sur bon JSON mise en forme.)