我有一个执行AJAX请求的慢函数:
function X(param1,param2){
var params={
type: "POST",
url: "./ajax/useful.php",
data: "param1="+param1+"¶m2="+param2,
success: function(msg){
//do something
}
};
var result=$.ajax(params).responseText;
}
当我打电话给X(“asdf”,“qwerty”)时,一切正常。
现在,我想要做的是能够按如下方式调用函数X:
function X(param1,param2,function(){alert('hi');}){
var params={
type: "POST",
url: "./ajax/useful.php",
data: "param1="+param1+"¶m2="+param2,
success: function(msg){
/////
//I want to be able call the function in the 3rd parameter (alert in this case)
/////
}
};
var result=$.ajax(params).responseText;
}
现在你可能会说为什么我不直接在成功中呼叫警报('hi')。当然我可以做到这一点,但我希望能够改变被调用函数内部的内容(不仅仅是一个简单的警报('hi'),具体取决于谁在调用X.
答案 0 :(得分:4)
您声明X
这样的功能:
function X(param1,param2,callback){
...使用这样的回调:
success: function(msg){
callback();
}
...并按照以下方式致电X
:
X('a', 'b', function(){alert('hi');});
这是有效的,因为您的成功处理程序是X
函数中的数据的闭包,包括其参数。它具有对该信息的实时引用(即使在X
返回之后),因此稍后当Ajax调用完成时,它仍然可以使用callback
参数。关于闭包的更多信息:Closures are not complicated
答案 1 :(得分:0)
function X(param1,param2,f){
var params={
type: "POST",
url: "./ajax/useful.php",
data: "param1="+param1+"¶m2="+param2,
success: function(msg){
f();
}
};
var result=$.ajax(params).responseText;
}
应该有效。 你不能这样叫X:
X(param1,param2,function(){dowhatever})