作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个执行 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;
}
现在你可能会说为什么我不直接在成功中调用alert('hi')。当然我可以做到这一点,但我希望能够改变被调用函数内部发生的事情(不仅仅是一个简单的警报('hi'),具体取决于谁在调用 X。
最佳答案
您可以这样声明您的 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
关于Javascript:在函数完成时调用特定函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4042593/
我是一名优秀的程序员,十分优秀!