【问题标题】:load doesn't trigger ajaxSetup complete handler on completeload 不会在完成时触发 ajaxSetup 完成处理程序
【发布时间】:2011-01-17 19:11:45
【问题描述】:

我有

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

在页面加载时为我的所有 ajax 调用设置加载动画。它工作完美,除了 load() 调用。对于仅触发 beforeSend 的加载,并且永远不会调用 complete,这会导致显示永不消失的动画。

有什么想法吗?

【问题讨论】:

    标签: ajax autocomplete


    【解决方案1】:

    根据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)。

    【讨论】:

      【解决方案2】:

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

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

      :)

      【讨论】:

      • 如果 AJAX 调用导致错误(即 HTTP 401)怎么办。是否也调用了成功处理程序?
      • 我认为没有,但应该调用 complete。
      【解决方案3】:

      $.load 手册说:

      ...大致相当于 $.get(url, data, success) 除了那个 它是一个方法而不是全局函数,它有一个隐含的 回调函数

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

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

      我想解决方案是用$.get(或更冗长的$.ajax)替换您的$.load 调用。您也可以尝试改用success

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-31
        • 1970-01-01
        • 2015-08-30
        相关资源
        最近更新 更多