deferred.done() 会在 ajaxComplete() 之前触发吗?

Does deferred.done() fire before ajaxComplete()?

我有一个 ajax 请求与 .done 方法链接:

$.ajax({
    type: "POST",
    url: $formAction,
    data: $form.serialize(),
})
.done(function () {
    refreshComplaintCategoryResults($categoryId);
});

还有一个.ajaxComplete()用来重新初始化一些事件:

$(document).ajaxComplete(function (e, jqXhr, ajaxOptions) {
    reinitAll();
});

应该先开火哪个? .done()方法还是ajaxComplete()方法?

我希望能够在 reinitAll() 方法之后执行 refreshComplaintCategoryResults()。我不想再次调用 reinitAll() 方法,因为它会被调用两次(我无法将其从 ajaxComplete() 方法中删除),但我不能将 refreshComplaintCategoryResults() 放在 ajaxComplete()方法。

更新:

我已将此添加到 ajaxComplete() 方法以获得我想要实现的目标并删除了 .done() 方法。但是,检查 url 以完成操作似乎有点混乱:

$(document).ajaxComplete(function (e, jqXhr, ajaxOptions) {
    reinitAll();

    if (ajaxOptions.url === "ComplaintWorkflow/GetComplaintCategoryResults")
    {
        $("tr[data-action-url]")[0].click();
    }
});

有没有更好的办法?

Does deferred.done() fire before ajaxComplete()?

是的,确实如此。这是 fiddle:

$(document).ajaxComplete(function (e, jqXhr, ajaxOptions) {
    console.log("ajaxComplete");
});
$.ajax({
    type: "POST",
    url: "/echo/json/",
    data: "{'a':1}",
})
.done(function () {
    console.log("ajax.done");
});

控制台输出:

ajax.done
ajaxComplete