1

这两个代码 (1)(2) 对我来说似乎以相同的方式工作。

我的问题是:
1)这两个代码是否等效?
2)如果是,为什么?如果不是,我应该更喜欢什么,为什么?


(1)

$.ajax({
    url: backendRouter.generate('feedback_send'),
    type: 'POST',
    dataType: 'json',
    data: data
    success: callback,
    done: function () {
        // some code
    }
});

(2)

$.ajax({
    url: backendRouter.generate('feedback_send'),
    type: 'POST',
    dataType: 'json',
    data: data
    success: callback
}).done(function () {
    // some code
});
4

1 回答 1

3

是的,这两个代码是等价的,除了(错误地?)你留success: callback在了后者。

但是恕我直言,后者是首选,因为延迟对象比直接提供回调灵活得多$.ajax

特别是,使用延迟对象可以更好地分离启动 AJAX 调用和处理该调用结果之间的逻辑和责任。此外,一些 AJAX 辅助函数不支持error回调。如果我写:

function doAjax() {
    return $.get(...);
}

然后,我可以将任意数量的donefail处理程序附加到该函数调用的结果,而不必将这些处理程序传递给doAjax函数。

我还可以使用,等将返回的promise()对象与其他 Promise结合起来,以便在多个异步事件(包括其他 AJAX 调用、计时器、动画等)之间实现非常强大的同步。我不能这样做$.when()$.pipe()success:

于 2012-08-23T08:30:15.437 回答