这段代码
$("#loading").ajaxStart(function() { alert("start"); $(this).show(); });
在我的标记
<div style="text-align:center;"><img id="loading" src="../images/common/loading.gif" alt="" /></div>
以下是完整的ajax请求:
$.ajax({ type: "POST",url: "http://localhost/WebServices/Service.asmx/GetResults",data: jsonText,contentType: "application/json; charset=utf-8",dataType: "json",success: function(response) { var results = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d; PopulateTree(results); },error: function(xhr,status,error) { var msg = JSON.parse(xhr.responseText); alert(msg.Message); } }); $("#loading").ajaxStart(function() { alert("start"); $(this).show(); }); $("#loading").ajaxStop(function() { alert("stop"); $(this).hide(); $("#st-tree-container").show(); });
即使gif显示旋转,也不会发出警报“开始”. AjaxStop按预期触发.
任何想法为什么?
解决方法
它不会触发,因为您的
.ajaxStart()
的处理程序没有注册,直到ajax请求已经进行(过去,当它被调用).
.ajaxStop()
也是在注册之后,但在请求完成之前,所以当它回来时,它被挂起来运行.
要解决这个问题,请在您的第一个$.ajax()
呼叫之前移动:
$("#loading").ajaxStart(function() { $(this).show(); }).ajaxStop(function() { $(this).hide(); $("#st-tree-container").show(); });
更新:启动jQuery 1.9,AJAX事件应该仅附加到文档.
http://jquery.com/upgrade-guide/1.9/#ajax-events-should-be-attached-to-document
$(document).ajaxStart(function() { $("#loading").show(); }); $(document).ajaxStop(function() { $("#loading").hide(); $("#st-tree-container").show(); });