2014-09-11 97 views
1

我不明白为什么这不起作用,我已经看了很多问题在这里在stackoverflow但无法找到我的代码有任何问题。ajaxComplete不被称为

我有一个#加载div,我想在ajax调用完成时删除。这是我的代码,ajaxComplete永远不会被调用。

我到底做错了什么?

$(document).ajaxStart(function() { 
     console.log("ajax start"); 
     $("#loading").show(); 
    }); 
    $(document).ajaxComplete(function() { 
     console.log("ajax complete"); 
     $("#loading").remove(); 
    }); 

    $(document).ready(function() { 


     $.ajax({ 
      type: 'GET', 
      url: '@Url.Content("~/Service/listAllDevices")' + '?limit=' + 300 + '&offset=' + 10, 
      dataType: 'json', 
      async: 'false', 
      global: true, 
      success: function (listAllDevicesResponse) { 
       console.log("ajax done"); 
       console.log(listAllDevicesResponse); 
      } 
     }); 

    }); 
+0

你可能想隐藏阿贾克斯完全加载标签,而不是将其删除。你的ajaxStart函数被调用了吗?你有没有尝试过一些Console.log,看看该方法是否被调用,但没有做你期望的? – Shriike 2014-09-11 13:37:02

+1

所以你没有在控制台中看到“ajax done”?您应该添加[错误处理程序](http://api.jquery.com/jquery.ajax/)并检查出现了什么问题。 – Regent 2014-09-11 13:37:07

+0

Ajax完成了,我也将console.logs添加到“开始”和“完成”,但它们从未关闭。 – 2014-09-11 13:38:18

回答

1

对于$ .ajax对象没有ajaxComplete事件处理程序,而是使用done或always。还有完整的事件处理程序,但从jQuery 1.8开始不推荐使用。

$(document).ajaxStart(function() { 
    console.log("ajax start"); 
    $("#loading").show(); 
}); 

$(document).ready(function() { 

    $.ajax({ 
     type: 'GET', 
     url: '@Url.Content("~/Service/listAllDevices")' + '?limit=' + 300 + '&offset=' + 10, 
     dataType: 'json', 
     async: 'false', 
     global: true, 
     success: function (listAllDevicesResponse) { 
      console.log("ajax done"); 
      console.log(listAllDevicesResponse); 
     }, 
     always: function() { 
      console.log("ajax complete"); 
      $("#loading").remove();    
     } 
    }); 

}); 

你可以阅读更多关于jQuery的$就here

+0

我在jQuery文档中没有看到任何关于这个被弃用的内容。你能提供一个参考吗? – Barmar 2014-09-11 13:55:00

+0

我认为这是对的,我刚才碰到了这个。成功,完成和错误。 – Bowenac 2014-09-11 14:12:16

+0

弃用声明:从jQuery 1.8开始,弃用jqXHR.success(),jqXHR.error()和jqXHR.complete()回调。要准备代码以便最终删除它们,请改用jqXHR.done(),jqXHR.fail()和jqXHR.always()。 这个文本可以在我提供的答案中找到。 – Teo 2014-09-11 14:18:59

0

我不太确定为什么你的完整函数没有被调用,但是我会推荐使用stop。每次完成一个INDIVIDUAL ajax请求时调用ajaxComplete。所有请求完成时调用ajaxStop。像这样:

$(document).ajaxStart(function() { 
    console.log("ajax start"); 
    $("#loading").show(); 
}); 

$(document).ajaxStop(function() { 
    console.log("ajax complete"); 
    $("#loading").hide(); 
}); 

参考文献:

https://api.jquery.com/ajaxStart/

https://api.jquery.com/ajaxStop/