通过Firebug进行调试时,未执行jQuery AJAX回调

时间:2014-04-24 05:16:57

标签: jquery debugging asynchronous firebug

这是一种经常被观察到的行为。 jQuery异步AJAX调用在没有打开Firebug的情况下运行时完美无缺。但是,当Firebug打开并且我通过在代码的其他部分放置一些断点进行调试时,AJAX回调事件不会触发。

我的假设是,由于我已经在另一个不相关的代码部分中逐步调试,因此AJAX响应回调事件正在转义。这个假设是对的吗?如果是,我该如何确保回调始终触发?如果没有,我做错了什么?

1 个答案:

答案 0 :(得分:1)

  

我的假设是,因为我已经逐步调试了   另一个不相关的代码部分,ajax响应回调事件是   逃脱。这个假设是对的吗?

是的,在Firebug 1.x中。虽然在Firebug 2.0中有fixed(在测试阶段写这个答案时)。

E.g。看看下面的代码:

<script type="text/javascript">
function makeRequest()
{
    var xhr = new XMLHttpRequest();
    xhr.open("GET", "test.php");

    xhr.onreadystatechange = function()
    {
        if (xhr.readyState === XMLHttpRequest.DONE)
            console.log("Request finished");
    }

    xhr.send(null);
    debugger;
}
</script>
<button onclick="makeRequest()">Make request</button>

当您点击制作请求按钮时,您希望将Request finished记录到控制台。 在高达1.12.8的Firebug中,输出不会出现在控制台中,而在2.0中也是如此。 这是因为Firefox公开了Firebug 2.0 adapts new debugger APIs,它解决了这个问题。

虽然请注意不会延迟对onreadystatechange的异步调用。这意味着即使您在debugger关键字处停止,它仍会执行。因此,console.log("Request finished")处的断点将被击中。

这与Chrome,Opera和Internet Explorer的JavaScript引擎不同,其中异步函数的执行正在等待调试器继续执行脚本。