type success headers error data jquery ajax post error-handling

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) });