我有一个方法,它正在进行jquery ajax调用。该方法返回 jquery 在使用 $.ajax
时创建的延迟对象:
function callWebservice() {
return $.ajax({
type: "POST",
url: "/echo/json/",
data: {delay: 2}
});
}
调用该方法后,我在代码的不同位置有几个"done"处理程序(可以访问该方法返回的Deferred
):
$(function () {
var dfr = callWebservice();
dfr.done(function() { console.log('done 1');})
dfr.done(function() { console.log('done 2');})
dfr.done(function() { console.log('done 3');})
dfr.done(function() { console.log('deferred state 2: ' + dfr.state());})
console.log('deferred state 1: ' + dfr.state());
});
当我运行该代码时,一切似乎都很好:我可以在控制台中看到 5 行,最后一行是:"延迟状态 2:已解决"。
但是,当我在第二个done
上放置断点并等待 Web 服务调用返回时,这 4 个done
处理程序都不会被调用。控制台中为"延迟状态 1:挂起"。
这是预期行为吗?该延迟对象是否由于调试而无法将其状态更改为"已解决"?还是我没有以正确的方式使用它?
我创建了一个小提琴,以便您轻松模拟此行为。
[更新]
它似乎确实在铬中工作。此外,在IE10中调试时,它会按预期工作。当使用Firefox的内置调试工具时,它也可以工作。所以这似乎是Firebug中的一个错误。
它确实是Firebug中的一个错误,或者更准确地说,是它使用的称为JSD的旧Firefox调试器API。一旦Firebug切换到新的JSD2 API,这个错误就会得到修复,该API计划在下一个主要版本中发布。
塞巴斯蒂安