2015-01-12 46 views
2

我有一個.done方法鏈接一個Ajax請求:deferred.done()在ajaxComplete()之前觸發嗎?

$.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()方法中。

UPDATE:

我已經加入這個的ajaxComplete()方法來得到我想要達到的目標,並去除中,.done()方法。然而,爲了完成一個動作,看起來似乎有些雜亂:

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

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

難道沒有更好的方法嗎?

+4

看起來像你有一個測試的所有氣質在那裏。 – canon

+0

我不確定我明白你的意思嗎? – 97ldave

+1

你爲什麼不嘗試並找出答案?將這兩個處理程序添加到您的'$ .ajax'調用中 – DLeh

回答

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 
+0

謝謝@canon - 我找到了答案。謝謝。我將不得不在ajaxComplete中使用ajaxOptions參數來實現我想要的。 – 97ldave

相關問題