这是一种经常观察到的行为。jQuery异步AJAX调用在不打开Firebug的情况下运行时完美无缺地工作。但是,当Firebug被打开并且我通过在代码的其他部分中放置一些断点进行调试时,AJAX回调事件不会触发。
我的假设是,由于我已经在代码的另一个不相关部分中一步一步地调试,所以AJAX响应回调事件正在被转义。这个假设对吗?如果是,我如何确保回调总是触发?如果没有,我做错了什么?
发布于 2014-04-24 01:40:58
我的假设是,由于我已经在代码的另一个不相关部分中一步一步地调试,所以ajax响应回调事件正在被转义。这个假设对吗?
是的,在Firebug 1.x中。尽管这是Firebug2.0中的固定 (在编写此答案时处于beta阶段)。
例如,请查看以下代码:
<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引擎不同,在这些引擎中,异步函数的执行正在等待调试器继续执行脚本。
https://stackoverflow.com/questions/23260381
复制相似问题