Jquery ajaxStart没有被触发

时间:2010-02-16 18:37:36

标签: jquery ajax

此代码

$("#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按预期触发。 有什么想法吗?

3 个答案:

答案 0 :(得分:42)

它没有被触发,因为.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();
});

答案 1 :(得分:2)

启动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");
});

答案 2 :(得分:0)

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

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