2013-10-26 78 views
1

我有一個是這樣的代碼:我可以通過beforeSend事件更改jQuery.ajax的函數調用參數(通過數據發送)嗎?

var offset = 1; 
$.ajax({ 
    url: /www/loadmoredata, 
    type: 'POST', 
    data: { 
     limit: 1, 
     offset: offset 
    }, 
    beforeSend: function (xhr, ajaxOptions, thrownError) { 
     offset++; 
    } 
}); 

現在我希望偏移通過Ajax被傳爲2,因爲我在beforeSend,其中AJAX被處理之前運行遞增。但是,似乎beforeSend將offset值作爲數據追加到函數調用後。

我的問題是:我做錯了什麼或者這不是什麼beforeSend方法是爲了用於?如果不是,那麼按照我的意圖做什麼纔是正確的做法?

+0

如果你做'++ offset'會發生什麼? – arb

+2

您已將數據對象傳遞給該函數,因此更改該對象中使用的變量爲時已晚。 – adeneo

回答

3

在beforeSend被調用之前,已經構造了Request,並且您試圖更改的數據對象已被放入Request中。這裏是beforeSend http://api.jquery.com/jQuery.ajax/的文檔。 ajaxOptions參數不是當前ajax請求的選項。所以你將能夠改變你傳遞給請求的數據。

也許如果你給我們一個更高層次的想法你試圖達到什麼我們可以提供幫助?

- 原始建議 -

膠印仍然在範圍,但你的期望是不正確的。試試這個:

var offset = 1; 
$.ajax({ 
    url: /www/loadmoredata, 
    type: 'POST', 
    data: { 
     limit: 1, 
     offset: offset 
    }, 
    beforeSend: function (xhr, ajaxOptions, thrownError) { 
     ajaxOptions.data.offset += ajaxOptions.data.offset; 
    } 
}); 
+0

您是否嘗試過這種方式,或者您只是假設存儲在ajaxOptions中的字符串可以更改,並且它也會更改傳遞的數據? – adeneo

+0

@adeneo我沒有嘗試過。在我閱讀我的答案後,它聽起來並不正確。我編輯過它。 – Sam

+1

我會爲你嘗試 - > http://jsfiddle.net/g3MMy/,它似乎並沒有工作! – adeneo

相關問題