2010-06-16 20 views
5

Cuando cierro mi servidor y le hago una solicitud de ajax, Firebug muestra que la solicitud se interrumpe unos segundos después de realizar la solicitud y se llama a mi controlador success.

¿Por qué se llama al controlador de éxito, no debería ser el controlador de errores? ¿Y cómo puedo detectar de manera confiable que en realidad no fue un éxito?

CÓDIGO:

  $.ajax({ 
       url: url, 
       type: "POST", 
       data: data, 
       dataType: "json", 
       success:function(data, statusText, xhr){ 
        //gets called on success, or even when server is down. 
       }, 
       error: function(){ 
        //called if server returns error, but not if it doesn't respond 
       } 
      }); 

ACTUALIZACIÓN: Este comportamiento es única en el servidor local, ocurre cuando se apaga mi servidor de desarrollo. Probé para ver qué sucede cuando trato de llegar al servidor de producción, pero tengo mi Internet personal desconectado, y simplemente cuelga, sin llamar éxito o error en absoluto. Supongo que debería establecer la propiedad de tiempo de espera para ese caso.

+1

no es positivo, pero tal vez la respuesta de 'abort' es diferente de' fail'? ¿Puedes publicar tu código? – hookedonwinter

+0

Posiblemente relacionado: http://stackoverflow.com/questions/2357147/ajax-how-to-prevent-jquery-from-calling-the-success-event-after-executing-xmlhtt –

+1

¿Cómo se lleva el servidor? ¿Es completamente inalcanzable o servirá para 404 páginas? –

Respuesta

3

Creo que esto es un error (?) En la versión 1.4.2 de jQuery.

cito un comentario de la jQuery documentation:

En jQuery 1.4.2 no llama Ajax de respuesta de error de tiempo de espera/conexión de error , para solucionar este problema: eliminar el xhr detrás "|| .status === 0" de httpSuccess función

Haga que si desea modificar el código jQuery en sí. Lo demás se puede comprobar en su devolución de llamada éxito como hago aquí:

$.ajax({ 
    type: "POST", 
    url: "http://madeUpServerthatdoesnotExist.com/index.php", 
    data: "id=1", 
    success: function(msg){ 
    if(this.xhr().status === 0){ 
      errorHandler(); 
    } 
    else { 
      alert('Success'); 
    } 
    }, 
    error: errorHandler 
}); 

function errorHandler(){ 
      alert('Freakin error'); 
} 

Parece ser complicado, por favor comentar si se sabe acerca de una mejor manera!

EDIT: Después de investigar, no estoy seguro de que esto podría ser un error en jQuery, se actualizará la respuesta tan pronto como llegue a una pista

+0

esto parece funcionar – Kyle

Cuestiones relacionadas