jquery - success - ¿Cómo atrapo un error de la publicación de consulta Ajax?
jquery ajax headers (6)
Me gustaría detectar el error y mostrar el mensaje apropiado si falla la solicitud de Ajax.
Mi código es como el siguiente, pero no pude conseguir la solicitud Ajax que falló.
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;
});
}
Descubrí que "Error en Ajax" nunca se ejecuta cuando falla la solicitud de Ajax.
¿Cómo manejo el error Ajax y muestro el mensaje apropiado si falla?
Desde jQuery 1.5 puede usar el mecanismo de objetos diferidos:
$.post(''some.php'', {name: ''John''})
.done(function(msg){ })
.fail(function(xhr, status, error) {
// error handling
});
Otra forma es usar .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");
}
});
Solucioné este problema declarando datatype: ''json''
en mi llamada jQuery ajax.
Una forma simple es implementar ajaxError :
Cuando una solicitud de Ajax se completa con un error, jQuery desencadena el evento ajaxError. Todos y cada uno de los controladores que se han registrado con el método .ajaxError () se ejecutan en este momento.
Por ejemplo:
$(''.log'').ajaxError(function() {
$(this).text(''Triggered ajaxError handler.'');
});
Sugeriría leer la documentación de ajaxError . Hace más que el simple caso de uso demostrado anteriormente, principalmente su devolución de llamada acepta una serie de parámetros:
$(''.log'').ajaxError(function(e, xhr, settings, exception) {
if (settings.url == ''ajax/missing.html'') {
$(this).text(''Triggered ajaxError handler.'');
}
});
jQuery 1.5 agregó objetos diferidos que manejan esto muy bien. Simplemente llame a $.post
y adjunte los controladores que desee después de la llamada. Los objetos diferidos incluso le permiten asociar múltiples manejadores de errores y de éxito.
Ejemplo:
$.post(''status.ajax.php'', {deviceId: id})
.done( function(msg) { ... } )
.fail( function(xhr, textStatus, errorThrown) {
alert(xhr.responseText);
});
Antes de jQuery 1.8, la función done
se llamaba success
y el fail
se llamaba 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) });