load在完成时不会触发ajaxSetup完成处理程序

时间:2010-02-17 10:23:48

标签: ajax autocomplete

我有

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

在页面加载时为我的所有ajax调用设置加载动画。除了load()调用之外,它工作正常。对于只有onSend被触发的加载,并且完成永远不会被调用,这会导致显示永不消失的动画。

有什么想法吗?

3 个答案:

答案 0 :(得分:5)

根据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 :(得分:2)

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

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

:)

答案 2 :(得分:1)

$.load手册说:

  

......大致相当于   $ .get(url,数据,成功)除外   它是一种方法而不是全局函数,它有一个隐含的   回调函数

似乎$.load的隐式回调函数覆盖了complete中的$.ajaxSetup回调。 $.ajaxSetup文档说:

  

所有后续的Ajax调用都使用any   功能将使用新设置,   除非被个人覆盖   调用,直到下一次调用   $ .ajaxSetup()。

我想解决方案是用$.get(或更详细的$.ajax)替换您的$.load来电。您也可以尝试使用success