1

我有一个方法是进行 jquery ajax 调用。该方法返回当您使用时由 jquery 创建的延迟对象$.ajax

function callWebservice() {
    return $.ajax({
        type: "POST",
        url: "/echo/json/",
        data: {delay: 2}
    });
}

在调用该方法后,我在代码的不同位置有几个“完成”处理程序(可以访问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:未决”。

这是预期的行为吗?由于调试,该延迟对象是否无法将其状态更改为“已解决”?还是我没有以正确的方式使用它?

我创建了一个小提琴,因此您可以轻松地模拟这种行为。

[更新]
它似乎确实在 chrome 中工作。此外,在 IE10 中调试它时,它也可以按预期工作。当使用 Firefox 的内置调试工具时,它也可以工作。所以这似乎是 Firebug 中的一个错误。

4

1 回答 1

2

这确实是Firebug 中的一个错误,或者更准确地说是它使用的称为 JSD 的旧 Firefox 调试器 API。一旦 Firebug切换到新的 JSD2 API计划在下一个主要版本中发布),这个错误就会得到修复。

塞巴斯蒂安

于 2013-10-18T08:48:17.427 回答