jquery ajax ignore 500 erreur d'état
Je suis en train de faire quelques demandes pour une Application application Moteur, les essais dans Chrome. Alors que je peux voir dans la console javascript que certains appels de 500 erreur de serveur, je n'arrive pas à trouver de toute façon de saisir cette erreur dans mon code jQuery malgré la lecture d'un certain nombre de similaire à ce fils. Je comprends qu'il indique une erreur du côté serveur, mais je voudrais encore être en mesure de capturer une telle erreur de ma javascript.
J'ai besoin de la capture de l'erreur, de sorte que je peux compter le nombre de réponses (réussies ou non) et de déclencher une autre fonction lors de l'appel de réponses ont été reçues.
Chrome sortie de la console:
GET http://myapp.com/api?callback=jQuery12345¶ms=restOfParams 500 (Internal Server Error)
Mon appel:
function makeCall() {
var count = 0;
var alldata = $('#inputset').val();
var rows = alldata.split('\n');
var countmatch = rows.length;
for (i=0;i<rows.length;i++) {
data["param"] = rows[i]["val"];
$.ajax({
url: apiUrl,
type: 'GET',
data: data,
dataType: 'jsonp',
error: function(){
alert('Error loading document');
count +=1;
},
success: function(responseJson) {
count +=1;
var res = responseJson.results;
if (count == countmatch) {
allDoneCallback(res);
}
},
});
}
}
J'ai essayé quelques-uns des éléments suivants:
Ajout:
statusCode: {500: function() {alert('err');}}
à l'appel.
À l'aide de:
$().ready(function(){
$.ajaxSetup({
error:function(x,e) {
if(x.status==500) {
alert('Internel Server Error.');
}
}
});
});
Ce que quelqu'un a une suggestion quant à la façon dont j'ai pu reprendre la réponse de 500?
Merci
Oli
Mise à JOUR:
Sur la base des réponses, mon jquery code semble correct, mais pour quelque raison il ne serait d'attraper certaines de 500 réponses reçues à partir de mon application. C'est peut-être un problème avec App Engine renvoie l'erreur(je ne sais pas beaucoup de choses à ce sujet), ou comment jquery gère les erreurs avec jsonp - ce point est discuté brièvement dans le dernier paragraphe de cette article.
J'ai eu ce travail en utilisant jquery-isonp qui a attiré tous les 500 statut de la levée par l'application.
statusCode
au lieu de status
?OriginalL'auteur oli | 2011-03-24
Vous devez vous connecter pour publier un commentaire.
Il ne semble pas que vous êtes à l'aide de jQuery
document.ready
de liaison correctement. Le$().ready(...)
version est plus ou moins obsolète. Essayez l'un de ces lieu:ou l'abréviation:
Je ne vois pas autre chose de mal avec votre code - le
error
de rappel devrait fonctionner comme à l'écrit. Pourriez-vous poster une SSCCE?Salut Matt, je ne peux malheureusement pas en ce moment (l'application que je suis d'appel est logé à l'interne à l'entreprise); cependant, je pense que j'ai réussi à isoler le problème un peu plus loin: App Engine app renvoie la 500 lorsque ce qu'il rencontre une erreur interne (jquery ne le détecte pas); si je l'utiliser soi-même.erreur(500) de la fonctionnalité, le jquery N'est détecter. Aussi loin que je peux voir dans le navigateur à la fois de revenir comme à peu près la même chose, donc je ne comprends toujours pas pourquoi l'un est correctement identifié.
Qu'entendez-vous par "l'application renvoie la 500?" Il sonne comme le GAE application n'est pas en envoyant le bon code d'état HTTP, sauf si vous utilisez la
self.error(500)
(donc, pourquoi ne pas le faire?).Salut Matt, toutes mes excuses si ma description n'a pas le sens complet. Lorsque GAE jette certaines erreurs (je crois qu'un DeadlineExceededError est un bon exemple - les demandes prend plus de 30 secondes), il semble jeter une erreur 500. C'est ce que mon navigateur voit de toute façon. Je ne suis pas sûr de ce qui est différent entre cette erreur et le 500 il jette, et de soi-même.erreur(500), la seule différence est que je force la seconde moi-même.. je ne veux pas perdre de temps donc je pense que je vais creuser dans la fixation de ce sur mon application, mais au final, je ne vois pas pourquoi jquery traite ces deux réponses différentes.
OriginalL'auteur Matt Ball
Résolu le problème en mettant à niveau de jQuery 1.9.1 à 2.1.1 — maintenant, il se mit à l'appeler
.error()
à droite sur la réponse du serveur (avant qu'il ne tiendrait pas compte de la réponse de 500 et attendre jusqu'à ce que le délai est de plus).Limitation: jQuery 2.1.1 ne prend pas en charge IE8 et inférieur (OMI ne devriez-vous pas)
OriginalL'auteur Angie
J'ai eu un problème similaire, j'ai été en utilisant jquery la promesse de fonctions de .fait, le .échouer .toujours, et si j'ai rencontré un 500 erreur interne du serveur, alors il ne serait pas le feu de l'une des fonctions (en fait, l'échec, toujours, d'erreur). très bizarre.
à la fin, j'ai ajouté un délai d'attente dans le .ajax options, quand il frappe le délai d'attente, il renvoie une erreur et gère également le .l'échec de la méthode.
OriginalL'auteur J nui