Je voudrais attraper l'erreur et montrer le message approprié si la demande Ajax échoue.
Mon code est comme le suivant, mais je ne pouvais pas attraper la requête Ajax qui échouait.
function getAjaxData(id)
{
$.post("status.ajax.php", {deviceId : id}, function(data){
var tab1;
if (data.length>0) {
tab1 = data;
}
else {
tab1 = "Error in Ajax";
}
return tab1;
});
}
J'ai découvert que "Erreur dans Ajax" n'est jamais exécuté lorsque la demande Ajax a échoué.
Comment gérer l'erreur Ajax et afficher le message approprié en cas d'échec?
Depuis jQuery 1.5, vous pouvez utiliser le mécanisme des objets différés:
$.post('some.php', {name: 'John'})
.done(function(msg){ })
.fail(function(xhr, status, error) {
// error handling
});
Une autre façon consiste à utiliser .ajax
:
$.ajax({
type: "POST",
url: "some.php",
data: "name=John&location=Boston",
success: function(msg){
alert( "Data Saved: " + msg );
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert("some error");
}
});
jQuery 1.5 a ajouté des objets différés qui gèrent cela bien. Appelez simplement $.post
et attachez tous les gestionnaires que vous souhaitez après l'appel. Les objets différés vous permettent même d’attacher plusieurs gestionnaires de succès et d’erreur.
Exemple:
$.post('status.ajax.php', {deviceId: id})
.done( function(msg) { ... } )
.fail( function(xhr, textStatus, errorThrown) {
alert(xhr.responseText);
});
Avant jQuery 1.8, la fonction done
était appelée success
et fail
était appelée error
.
$.ajax({
type: 'POST',
url: 'status.ajax.php',
data: {
deviceId: id
},
success: function(data){
// your code from above
},
error: function(xhr, textStatus, error){
console.log(xhr.statusText);
console.log(textStatus);
console.log(error);
}
});
$.post('someUri', { },
function(data){ doSomeStuff })
.fail(function(error) { alert(error.responseJSON) });
Un moyen simple consiste à implémenter ajaxError :
Chaque fois qu'une demande Ajax se termine avec une erreur, jQuery déclenche l'événement ajaxError. Tous les gestionnaires enregistrés avec la méthode .ajaxError () sont exécutés à ce moment.
Par exemple:
$('.log').ajaxError(function() {
$(this).text('Triggered ajaxError handler.');
});
Je suggère de lire la documentation ajaxError . Il fait plus que le simple cas d'utilisation présenté ci-dessus - son rappel accepte principalement un certain nombre de paramètres:
$('.log').ajaxError(function(e, xhr, settings, exception) {
if (settings.url == 'ajax/missing.html') {
$(this).text('Triggered ajaxError handler.');
}
});