2010-02-17 8 views
6

tengocarga no desencadenar ajaxSetup manejador completa en completa

// Ajax setup 
$.ajaxSetup({ 
beforeSend: function() { 
$('#general-ajax-load ').fadeIn(); 
}, 
complete: function() { 
$('#general-ajax-load ').fadeOut(); 
} 
}); 

al cargar la página para configurar la animación de carga para todas las llamadas ajax. Funciona perfecto, excepto para llamadas a load(). Para cargas solo antes de que se envíeSend, y nunca se llama completar, lo que resulta con mostrar una animación que nunca desaparece.

¿Alguna idea?

Respuesta

4

Según http://bugs.jquery.com/ticket/4086#comment:4, la forma "correcta" sería:

$(document).ajaxSend(function(event, jqXHR, settings) { 
    $('#general-ajax-load ').fadeIn(); 
}); 

$(document).ajaxComplete(function(event, jqXHR, settings) { 
    $('#general-ajax-load ').fadeOut(); 
}); 

Acabo de hacer algunas pruebas y que, de hecho, parece funcionar en todos los casos (incluido $.load).

1

El manual $.load dice:

... Es más o menos equivalente a $ .get (url, los datos, el éxito), excepto que es un método en lugar de la función global y tiene una implícita función de devolución de llamada.

Parecería que la función de devolución de llamada implícita $.load 's es reemplazar la devolución de llamada complete en su $.ajaxSetup. La documentación $.ajaxSetup dice:

todos los posteriores llamadas Ajax usando cualquier función va a utilizar la nueva configuración, menos que se sustituyan por los llamadas individuales, hasta la siguiente invocación de $ .ajaxSetup().

supongo que la solución sería la de sustituir sus $.load llamadas con $.get (o la más prolija $.ajax). También puede intentar usar success en su lugar.

2

Adición de éxito solucionó el problema, gracias (puedo jurar que lo probé antes)

$.ajaxSetup({ 
beforeSend: function() { 
$('#general-ajax-load ').fadeIn(); 
}, 
complete: function() { 
$('#general-ajax-load ').fadeOut(); 
} 
success: function() { 
$('#general-ajax-load ').fadeOut(); 
} 
}); 

:)

+0

¿Qué sucede si la llamada AJAX produce un error (es decir, HTTP 401)? ¿Se llama también al controlador de éxito? –

+0

Creo que no, pero debe completarse. – umpirsky