Jquery ajaxStart没有被触发

这段代码

$("#loading").ajaxStart(function() { alert("start"); $(this).show(); }); 

在我的加价

 

这是完整的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(); }); 

启动jQuery 1.9,AJAX事件应仅附加到文档。

请参阅迁移指南。 http://jquery.com/upgrade-guide/1.9/#ajax-events-should-be-attached-to-document

从jQuery 1.9开始,全局AJAX事件(ajaxStart,ajaxStop,ajaxSend,ajaxComplete,ajaxError和ajaxSuccess)仅在文档元素上触发。 更改程序以侦听文档上的AJAX事件。 例如,如果代码当前如下所示:

 $("#status").ajaxStart(function() { $(this).text("Ajax started"); }); 

把它改成这个:

 $(document).ajaxStart(function() { $("#status").text("Ajax started"); }); 

我不确定这是否能解决您的问题,但通常我会将debug.info('your message')与Firebug控制台结合使用而不是alert() ,因为警报会中断您的脚本处理,直到您在调试时解除它。信息相当不引人注目。

您可以在此处下载debug.info的实现。