Comment gérer les erreurs dans un appel getJSON? Im essayant de référencer un service de script inter-domaines en utilisant jsonp, comment enregistrer une méthode d'erreur?
192
Comment gérer les erreurs dans un appel getJSON? Im essayant de référencer un service de script inter-domaines en utilisant jsonp, comment enregistrer une méthode d'erreur?
Réponses:
$.getJSON()
est une sorte d'abstraction d'un appel AJAX normal où vous auriez à dire que vous voulez une réponse codée JSON.Vous pouvez gérer les erreurs de deux manières: de manière générique (en configurant vos appels AJAX avant de les appeler) ou spécifiquement (avec une chaîne de méthodes).
«générique» serait quelque chose comme:
Et la manière `` spécifique '':
la source
JSONP
car il semble quegetJSON
dans ce cas, il n'appelle pas laerror()
fonction. J'ai le même problème. Je suppose que cela a à voir avec la façon dontJSONP
est géré totalement différent desAJAX
appels normauxjQuery
malgré lagetJSON
gestion des deux.JSON
se fait avec unXMLHTTPRequest
objet maisJSONP
se fait en ajoutant dynamiquement une<script>
balise à la pageHEAD
.Quelqu'un donne ces points à Luciano :) Je viens de tester sa réponse - j'avais une question similaire - et j'ai parfaitement fonctionné ...
J'ajoute même mes 50 cents:
la source
Voici mon ajout.
De http://www.learnjavascript.co.uk/jq/reference/ajax/getjson.html et de la source officielle
" Les méthodes de rappel jqXHR.success (), jqXHR.error () et jqXHR.complete () introduites dans jQuery 1.5 sont obsolètes à partir de jQuery 1.8. Pour préparer votre code en vue de sa suppression éventuelle, utilisez jqXHR.done (), jqXHR .fail () et jqXHR.always () à la place. "
Je l'ai fait et voici l'extrait de code mis à jour de Luciano:
Et avec la description de l'erreur et l'affichage de toutes les données json sous forme de chaîne:
Si vous n'aimez pas les alertes, remplacez-les par
console.log
la source
Je sais que cela fait un moment que quelqu'un n'a pas répondu ici et que l'affiche a probablement déjà reçu sa réponse d'ici ou d'ailleurs. Je pense cependant que cet article aidera tous ceux qui recherchent un moyen de suivre les erreurs et les délais d'attente tout en effectuant des requêtes getJSON. Donc ci-dessous ma réponse à la question
La structure getJSON est la suivante (disponible sur http://api.jqueri.com ):
la plupart des gens implémentent cela en utilisant
où ils utilisent l'url var pour fournir un lien vers les données JSON, le datatosend comme un endroit pour ajouter les
"?callback=?"
variables et d'autres qui doivent être envoyées pour obtenir les données JSON correctes renvoyées, et la fonction de succès en tant que fonction de traitement des données .Vous pouvez cependant ajouter les variables status et xhr dans votre fonction de réussite. La variable status contient l'une des chaînes suivantes: "success", "notmodified", "error", "timeout" ou "parsererror", et la variable xhr contient l'objet XMLHttpRequest renvoyé ( trouvé sur w3schools )
De cette façon, il est facile de suivre les délais d'expiration et les erreurs sans avoir à implémenter un suivi de délai d'expiration personnalisé qui est démarré une fois qu'une demande est effectuée.
J'espère que cela aide quelqu'un qui cherche toujours une réponse à cette question.
la source
Il est corrigé dans jQuery 2.x; Dans jQuery 1.x, vous n'obtiendrez jamais de rappel d'erreur
la source
J'ai été confronté à ce même problème, mais plutôt que de créer des rappels pour une demande ayant échoué, j'ai simplement renvoyé une erreur avec l'objet de données json.
Si possible, cela semble être la solution la plus simple. Voici un exemple du code Python que j'ai utilisé. (Utilisation de Flask, jsonify f de Flask et SQLAlchemy)
Ensuite, vous pouvez vérifier Javascript comme ceci;
la source
Pourquoi pas
??
Pour plus de détails sur la
.fail()
méthode utilisée (jQuery 1.5+), voir http://api.jquery.com/jQuery.ajax/#jqXHRPuisque le
jqXHR
est retourné par la fonction, un chaînage commeest possible.
la source
Dans certains cas, vous pouvez rencontrer un problème de synchronisation avec cette méthode. J'ai écrit l'appel de rappel dans une
setTimeout
fonction, et cela a fonctionné de manière synchrone très bien =)PAR EXEMPLE:
la source
C'est un fil assez ancien, mais il apparaît dans la recherche Google, alors j'ai pensé ajouter une réponse jQuery 3 en utilisant des promesses. Cet extrait montre également:
L'extrait de code est:
la source