2010-02-17 40 views
6

完整的处理程序我有负载不会触发ajaxSetup上完全

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

在页面加载设置加载动画为我所有的Ajax调用。除了load()调用外,它工作得很完美。仅在发送之前触发负载,并且完全不会被调用,其结果是显示永不消失的动画。

有什么想法?

回答

4

http://bugs.jquery.com/ticket/4086#comment:4, “正确” 的方法是:

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

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

我只是做了一些测试,确实似乎在所有情况下都能正常工作(包括$.load)。

1

$.load手册说:

...这是大致相当于 $获得(网址,数据,成功)只是 它是一种方法,而不是全局函数,它有一个隐含 回调函数

这似乎是$.load的隐回调函数重载complete回调在$.ajaxSetup。该$.ajaxSetup文件说:

所有后续Ajax调用使用任何 功能将使用新的设置, 除非个别 调用所重写,直到 $ .ajaxSetup的下一次调用()。

我猜的解决办法是用$.get更换您的通话$.load(或更详细的$.ajax)。您也可以尝试使用success

2

添加成功解决了这一问题,谢谢(我可以发誓,我尝试过)

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

:)

+0

如果AJAX调用导致错误(即HTTP 401),该怎么办?成功处理程序是否也被调用? – 2011-01-15 13:03:18

+0

我认为没有,但应该叫完整。 – umpirsky 2011-01-17 10:09:17