Jquery ajaxStart没有被触发

前端之家收集整理的这篇文章主要介绍了Jquery ajaxStart没有被触发前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这段代码
  1. $("#loading").ajaxStart(function() {
  2. alert("start");
  3. $(this).show();
  4. });

在我的标记

  1. <div style="text-align:center;"><img id="loading" src="../images/common/loading.gif" alt="" /></div>

以下是完整的ajax请求:

  1. $.ajax({
  2. type: "POST",url: "http://localhost/WebServices/Service.asmx/GetResults",data: jsonText,contentType: "application/json; charset=utf-8",dataType: "json",success: function(response) {
  3.  
  4. var results = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
  5. PopulateTree(results);
  6. },error: function(xhr,status,error) {
  7. var msg = JSON.parse(xhr.responseText);
  8. alert(msg.Message);
  9.  
  10.  
  11. }
  12. });
  13.  
  14. $("#loading").ajaxStart(function() {
  15. alert("start");
  16. $(this).show();
  17. });
  18.  
  19. $("#loading").ajaxStop(function() {
  20. alert("stop");
  21. $(this).hide();
  22. $("#st-tree-container").show();
  23.  
  24. });

即使gif显示旋转,也不会发出警报“开始”. AjaxStop按预期触发.
任何想法为什么?

解决方法

它不会触发,因为您的 .ajaxStart()的处理程序没有注册,直到ajax请求已经进行(过去,当它被调用). .ajaxStop()也是在注册之后,但在请求完成之前,所以当它回来时,它被挂起来运行.

解决这个问题,请在您的第一个$.ajax()呼叫之前移动:

  1. $("#loading").ajaxStart(function() {
  2. $(this).show();
  3. }).ajaxStop(function() {
  4. $(this).hide();
  5. $("#st-tree-container").show();
  6. });

更新:启动jQuery 1.9,AJAX事件应该仅附加到文档.
http://jquery.com/upgrade-guide/1.9/#ajax-events-should-be-attached-to-document

  1. $(document).ajaxStart(function() {
  2. $("#loading").show();
  3. });
  4.  
  5. $(document).ajaxStop(function() {
  6. $("#loading").hide();
  7. $("#st-tree-container").show();
  8. });

猜你在找的jQuery相关文章