until success headers example jquery ajax json callback wait

success - jquery ajax post



jQuery: Handle fallback para la solicitud fallida de AJAX (5)

¿Puede jQuery proporcionar una alternativa para las llamadas AJAX fallidas? Este es mi intento:

function update() { var requestOK = false; $.getJSON(url, function(){ alert(''request successful''); requestOK = true; }); if (!requestOK) { alert(''request failed''); } }

Lamentablemente, incluso si se llama a la función de devolución de llamada del método $ .getJSON (), recibo el mensaje "solicitud fallida" antes de que la función de devolución de llamada tenga la oportunidad de establecer la variable requestOK. Creo que es porque el código se ejecuta en paralelo. ¿Hay alguna manera de manejar tales situaciones? Pensé en el encadenamiento o alguna forma de esperar la solicitud de AJAX, incluida su función de devolución de llamada. ¿Pero cómo? ¿Alguien sabe cómo hacer eso?


Creo que lo que estás buscando es la opción de error para el objeto jquery ajax

getJSON es un contenedor del objeto $.ajax , pero no le proporciona acceso a la opción de error.

EDITAR: dcneiner ha dado un buen ejemplo del código que necesitaría usar. (Incluso antes de que pudiera publicar mi respuesta)


Sí, está integrado en jQuery. Vea los documentos en la documentación de jquery .

ajaxError puede ser lo que quieras.


Tendrá que usar la llamada de $ .ajax de nivel inferior o la función ajaxError . Aquí está con el método $ .ajax:

function update() { $.ajax({ type: ''GET'', dataType: ''json'', url: url, timeout: 5000, success: function(data, textStatus ){ alert(''request successful''); }, error: function(xhr, textStatus, errorThrown){ alert(''request failed''); } }); }

EDITAR Agregué un timeout de timeout a la llamada $.ajax y $.ajax en cinco segundos.


La respuesta de Dougs es correcta, pero en realidad puedes usar $.getJSON y detectar errores (sin tener que usar $.ajax ). Simplemente encadena la llamada getJSON con una llamada a la función de fail :

$.getJSON(''/foo/bar.json'') .done(function() { alert(''request successful''); }) .fail(function() { alert(''request failed''); });

Demostración en vivo: http://jsfiddle.net/NLDYf/5/

Este comportamiento es parte de la interfaz jQuery.Deferred.
Básicamente, le permite adjuntar eventos a una acción asincrónica después de llamar a esa acción, lo que significa que no tiene que pasar la función de evento a la acción.

Lea más acerca de jQuery.Deferred aquí: http://api.jquery.com/category/deferred-object/


Prefiero este enfoque porque puedes devolver la promesa y usar .then (successFunction, failFunction); donde sea que necesites

var promise = $.ajax({ type: ''GET'', dataType: ''json'', url: url, timeout: 5000 }).then(function( data, textStatus, jqXHR ) { alert(''request successful''); }, function( jqXHR, textStatus, errorThrown ) { alert(''request failed''); }); //also access the success and fail using variable promise.then(successFunction, failFunction);