J'ai un appel ajax qui transmet des données à une page qui renvoie ensuite une valeur.
J'ai récupéré l'appel réussi de la page mais je l'ai codé de sorte qu'il soulève une erreur dans l'asp. Comment puis-je récupérer cette erreur de la JQuery?
Par exemple:
cache: false,
url: "addInterview_Code.asp",
type: "POST",
datatype: "text",
data: strData,
success: function (html) {
alert('successful : ' + html);
$("#result").html("Successful");
},
error: function (error) {
**alert('error; ' + eval(error));**
}
C'est le bit d'erreur que je ne comprends pas. Dans la fonction, quel paramètre dois-je mettre, pour pouvoir ensuite utiliser le message d'erreur I soulevé sur le serveur.
Les paramètres requis dans une fonction Ajax error
sont jqXHR, exception
et vous pouvez les utiliser comme suit:
$.ajax({
url: 'some_unknown_page.html',
success: function (response) {
$('#post').html(response.responseText);
},
error: function (jqXHR, exception) {
var msg = '';
if (jqXHR.status === 0) {
msg = 'Not connect.\n Verify Network.';
} else if (jqXHR.status == 404) {
msg = 'Requested page not found. [404]';
} else if (jqXHR.status == 500) {
msg = 'Internal Server Error [500].';
} else if (exception === 'parsererror') {
msg = 'Requested JSON parse failed.';
} else if (exception === 'timeout') {
msg = 'Time out error.';
} else if (exception === 'abort') {
msg = 'Ajax request aborted.';
} else {
msg = 'Uncaught Error.\n' + jqXHR.responseText;
}
$('#post').html(msg);
},
});
jqXHR:
C'est en fait un objet d'erreur qui ressemble à ceci
Vous pouvez également voir cela dans la console de votre propre navigateur, en utilisant console.log
dans la fonction error
comme:
error: function (jqXHR, exception) {
console.log(jqXHR);
// Your error handling logic here..
}
Nous utilisons la propriété status
de cet objet pour obtenir le code d'erreur. Par exemple, si nous obtenons status = 404, cela signifie que la page demandée est introuvable. Cela n'existe pas du tout. Sur la base de ce code d'état, nous pouvons rediriger les utilisateurs vers la page de connexion ou tout autre élément requis par notre logique métier.
exception:
C'est une variable chaîne qui montre le type d'exception. Donc, si nous obtenons une erreur 404, le texte exception
serait simplement "erreur". De la même manière, nous pourrions avoir les termes "timeout", "abort", comme d'autres textes d'exception.
Avis de dépréciation: Les rappels
jqXHR.success()
,jqXHR.error()
etjqXHR.complete()
sont obsolètes à partir de jQuery 1.8. Pour préparer votre code en vue de son éventuelle suppression, utilisez plutôtjqXHR.done()
,jqXHR.fail()
etjqXHR.always()
.
Donc, si vous utilisez jQuery 1.8 ou supérieur , nous aurons besoin de mettre à jour la logique de la fonction de succès et d'erreur comme: -
// Assign handlers immediately after making the request,
// and remember the jqXHR object for this request
var jqxhr = $.ajax("some_unknown_page.html")
.done(function (response) {
// success logic here
$('#post').html(response.responseText);
})
.fail(function (jqXHR, exception) {
// Our error logic here
var msg = '';
if (jqXHR.status === 0) {
msg = 'Not connect.\n Verify Network.';
} else if (jqXHR.status == 404) {
msg = 'Requested page not found. [404]';
} else if (jqXHR.status == 500) {
msg = 'Internal Server Error [500].';
} else if (exception === 'parsererror') {
msg = 'Requested JSON parse failed.';
} else if (exception === 'timeout') {
msg = 'Time out error.';
} else if (exception === 'abort') {
msg = 'Ajax request aborted.';
} else {
msg = 'Uncaught Error.\n' + jqXHR.responseText;
}
$('#post').html(msg);
})
.always(function () {
alert("complete");
});
J'espère que ça aide!
Essaye ça:
error: function(jqXHR, textStatus, errorThrown) {
console.log(textStatus, errorThrown);
}
Si vous souhaitez informer votre interface d'une erreur de validation, essayez de renvoyer json:
dataType: 'json',
success: function(data, textStatus, jqXHR) {
console.log(data.error);
}
Votre script ASP devrait retourner:
{"error": true}
Voici comment vous extrayez l'erreur asp.
cache: false,
url: "addInterview_Code.asp",
type: "POST",
datatype: "text",
data: strData,
success: function (html) {
alert('successful : ' + html);
$("#result").html("Successful");
},
error: function (jqXHR, textStatus, errorThrown) {
if (jqXHR.status == 500) {
alert('Internal error: ' + jqXHR.responseText);
} else {
alert('Unexpected error.');
}
}
error(jqXHR, textStatus, errorThrown)
cache: false,
url: "addInterview_Code.asp",
type: "POST",
datatype: "text",
data: strData,
success: function (html) {
alert('successful : ' + html);
$("#result").html("Successful");
},
error: function(data, errorThrown)
{
alert('request failed :'+errorThrown);
}
vous utilisez une fonction
error(error)
mais jquery recherche actuellement une fonction avec trois paramètres:
error(jqXHR, textStatus, errorThrown)
vous devrez ajouter deux paramètres supplémentaires.
AUSSI: jetez un oeil à tous les commentaires ci-dessus qui mentionnent 'obsolète' :)
$.ajax("www.stackoverflow.com/api/whatever", {
dataType:"JSON"
data: { id=1, name='example' }
}).succes(function (result) {
// use result
}).error(function (jqXHR, textStatus, errorThrown) {
// handle error
});
De jquery.com:
The jqXHR.success(), jqXHR.error(), and jqXHR.complete()
callback methods introduced injQuery 1.5 are deprecated
as of jQuery 1.8. To prepare your code for their eventual
removal, use jqXHR.done(), jqXHR.fail(), and jqXHR.always() instead.
Si vous voulez des gestionnaires globaux, vous pouvez utiliser:
.ajaxStart(), .ajaxStop(),
.ajaxComplete(), .ajaxError(),
.ajaxSuccess(), .ajaxSend()