的解决方案是变量绑定到结束。
作为更基本的例子,这里是接收并调用的回调函数,以及示例回调函数的示例功能:
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