2017-01-30 33 views
0

我遇到問題$.ajax$.whenapply。我有一個構造函數: Ajax請求沒有被觸發時,它應該是: http://plnkr.co/edit/Ul9d8tB7BHoZyHzzQQyB?p=preview (見控制檯)

function updateGeneralTerm() { 
    return { 
    id: "GeneralCondition", 
    ajax: function() { 
     return $.ajax({ 
     type: 'POST', 
     url: "@Url.Action("UpdateGeneralTerms", "Agreements")", 
     data: $("#GeneralConditions").serialize() 
     }) 
    } 
    } 
} 

//I inject it in my custom function   
function CustomFunction(arr) { 
    let arrOfAjax = arr.map(function (obj) { 
    return obj.ajax 
    }); 
    $.when.apply(null, arrOfAjax); 
} 

CustomFunction([new updateGeneralTerm()]; 

在我CustomFunction,我檢查其他的東西,因爲它的形式發生了變化..等等。但它似乎與我的問題沒有關係。什麼都沒發生。

將來我可能會有n個特定的術語,我只想在表單發生變化時更新。

我的問題:ajax沒有被$ .when()請求。如果我更改爲返回obj.ajax(),那麼ajax請求將直接由$ .when()觸發。 我想要$ .when()來處理所有的ajax請求。

http://plnkr.co/edit/Ul9d8tB7BHoZyHzzQQyB?p=preview

+0

這是因爲你使用'AJAX的參考()'函數。你實際上並沒有調用它。嘗試使用'return obj.ajax();'。在證明從數組中的'updateGeneralTerm()'返回到'CustomFunction()'的對象時,有點奇怪。大概這是因爲在你的生產代碼中你實際上會有一個預先填充的數組... ...? –

+0

@RoryMcCrossan =>不工作。如果我在做obj.ajax(),那麼$ .ajax()會被觸發......我確定因爲我評論了$ .when(...)並且它到達了控制器方法。 – Stefdelec

+0

'如果我在做obj.ajax(),$ .ajax()被觸發'這就是我所說的,你試圖達到的目標是不是?也請給予更多的信息,而不僅僅是「它不工作」。什麼不行?它失敗的地方在哪裏?您是否在控制檯檢查了錯誤,或者在網絡選項卡上查看了responseText? –

回答

1

嘗試重寫你的CustomFunction功能使用spread操作:

function CustomFunction(arr) { 
    let arrOfAjax = arr.map(function (obj) { 
    return obj.ajax 
    }); 
    $.when(...arrOfAjax).then(function(...results) { 
    console.log(results); 
    }); 
} 
+0

抱歉,無法檢查它現在,將在今晚晚些時候檢查... – Andriy

+0

其實它是工作,我搞砸了我的頭腦!所以沒有必要檢查它。謝謝。但它應該與「.apply」,但我不會更深入問題。謝謝! – Stefdelec

+0

'apply'被用來傳遞給'$ .when'函數任意數量的promise作爲一個數組,因爲'$ .when'預計會承諾(d1,d2,d3).done(函數(v1,v2,v3)...)分隔。 'spread'運算符允許我們將參數作爲一個數組傳遞,但由函數接收並由逗號參數分隔,所以如果使用'spread'(三個點),則不需要'apply' – Andriy