有沒有什麼辦法可以從ajax的成功回調中訪問內部的Deferred對象?我希望能夠將抽象的ajax調用傳遞給函數,但是能夠將該函數調用包裝在$ .when()中,並使用reject()和resolve()將參數傳回給我的done()和失敗()回調,像這樣:我可以在AJAX延遲迴調中訪問Deferred對象嗎?
$.when(makeCall())
.done(function(data){
//do something with data
})
.fail(function(message){
//show error
});
function makeCall(){
return $.ajax({
url : //some url,
success : function(data){
if(!data.someCondition){
//i'd like to reject the internal deferred here
//and send it back an error message to my
//the callers fail method like reject('message')
}
else{
//i'd like to resolve the deferred here and
//pass back the data to the callers done
//method like resolve(data)
}
}
});
}
現在,我在另一個Deferred對象包裝MakeCall函數()和解決或拒絕一個在AJAX回調,但感覺就像我應該能夠做到這一點,而無需額外的Deferred包裝。
而不是返回'$ .ajax'調用的結果,您是否嘗試將其設置爲一個變量並返回該變量?如果成功,你可以拒絕或解決它。我沒有嘗試過,但值得一試。 – MrOBrian
@MrOBrian:這基本上是他想避免的包裝。 – pimvdb
我實際上已經嘗試過,像'var dfd = $ .ajax({})'一樣,但是ajax函數只返回了promise,而不是整個Deferred對象,我可以調用resolve和reject。 – bittersweetryan