0

我有一个执行 AJAX 请求的慢速函数:

function X(param1,param2){
var params={
    type: "POST",
    url: "./ajax/useful.php",
    data: "param1="+param1+"&param2="+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+"&param2="+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.

4

2 回答 2

4

你声明你的X函数是这样的:

function X(param1,param2,callback){

...使用这样的回调:

success: function(msg){
    callback();
}

...并X像这样调用:

X('a', 'b', function(){alert('hi');});

这是有效的,因为您的成功处理程序是函数内数据的闭包X,包括其参数。它具有对该信息的实时引用(即使在X返回之后),因此稍后当 Ajax 调用完成时,它仍然可以使用该callback参数。更多关于闭包的信息:闭包并不复杂

于 2010-10-28T11:53:47.680 回答
0
function X(param1,param2,f){
var params={
    type: "POST",
    url: "./ajax/useful.php",
    data: "param1="+param1+"&param2="+param2,
    success: function(msg){
      f();
    }
  };
  var result=$.ajax(params).responseText;
}

应该管用。你不能像这样调用 X:

X(param1,param2,function(){dowhatever})
于 2010-10-28T11:54:07.283 回答