deferred.done()是否在ajaxComplete()之前触发?

时间:2015-01-12 14:26:16

标签: jquery ajax

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

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

还有.ajaxComplete()用于重新初始化某些事件:

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

哪一个应先开火? .done()方法或ajaxComplete()方法?

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

更新

我已将此添加到ajaxComplete()方法以获取我想要实现的内容并删除了.done()方法。但是,检查网址以完成操作似乎有点麻烦:

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

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

有没有更好的方法?

1 个答案:

答案 0 :(得分:3)

  

deferred.done()之前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