首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >通过Firebug调试时未执行jQuery AJAX回调

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

Stack Overflow用户
提问于 2014-04-23 21:16:57
回答 1查看 839关注 0票数 1

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-24 01:40:58

我的假设是,由于我已经在代码的另一个不相关部分中一步一步地调试,所以ajax响应回调事件正在被转义。这个假设对吗?

是的,在Firebug 1.x中。尽管这是Firebug2.0中的固定 (在编写此答案时处于beta阶段)。

例如,请查看以下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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>

当您单击Make按钮时,您希望Request finished会被记录到控制台。在最多1.12.8的Firebug中,输出不会出现在控制台中,而在2.0中则会出现。这是因为火狐发布的Firebug2.0 适应新的调试器APIs解决了这个问题。

但是请注意,对onreadystatechange的异步调用不会被推迟。这意味着即使在debugger关键字下停止,它仍将被执行。因此,console.log("Request finished")的一个断点将击中而不是

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23260381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文