的解決方案是變量綁定到結束。
作爲更基本的例子,這裏是接收並調用的回調函數,以及示例回調函數的示例功能:
function callbackReceiver(callback) {
callback("Hello World");
}
function callback(value1, value2) {
console.log(value1, value2);
}
這調用回調並提供一個參數。現在你想提供一個額外的參數,所以你把閉包中的回調。
callbackReceiver(callback); // "Hello World", undefined
callbackReceiver(function(value) {
callback(value, "Foo Bar"); // "Hello World", "Foo Bar"
});
,或者更簡單地使用ES6 Arrow Functions:
callbackReceiver(value => callback(value, "Foo Bar")); // "Hello World", "Foo Bar"
至於你具體的例子,我沒有使用jQuery中的.post
功能,但文檔的快速掃描暗示回電應該是函數指針,並帶有以下簽名:
function callBack(data, textStatus, jqXHR) {};
因此,我認爲解決的辦法如下:
var doSomething = function(extraStuff) {
return function(data, textStatus, jqXHR) {
// do something with extraStuff
};
};
var clicked = function() {
var extraStuff = {
myParam1: 'foo',
myParam2: 'bar'
}; // an object/whatever extra params you wish to pass.
$.post("someurl.php", someData, doSomething(extraStuff), "json");
};
這是怎麼回事?
在最後一行中,doSomething(extraStuff)
是調用和調用的結果是一個函數指針。
因爲extraStuff
作爲參數傳遞給doSomething
它在doSomething
函數的範圍內。
當在doSomething
的返回匿名內部函數中引用extraStuff
時,它被封閉到外部函數的參數extraStuff
。即使在doSomething
已返回後也是如此。
我還沒有測試過上述內容,但是我在過去的24小時內編寫了非常類似的代碼,它的工作原理與我所描述的一樣。
根據您的個人偏好/編碼標準,您當然可以傳遞多個變量而不是單個'extraStuff'對象。
值得一提的是,從1.4版本開始,jQuery.ajax()已經有了一個上下文設置(http://jquery14.com/day-01/jquery-14)在這裏可以看到它的用法示例:http:// stackoverflow 。com/questions/5097191/ajax-context-option/5097214#5097214 – russau 2011-10-05 08:34:17
我解決了我的問題,在AJAX完成後返回數據,然後執行某些操作。 – Onaiggac 2017-05-25 18:05:13