Javascript:在函数完成时调用特定函数

时间:2010-10-28 11:51:45

标签: javascript jquery function anonymous

我有一个执行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;
}

现在你可能会说为什么我不直接在成功中呼叫警报('hi')。当然我可以做到这一点,但我希望能够改变被调用函数内部的内容(不仅仅是一个简单的警报('hi'),具体取决于谁在调用X.

2 个答案:

答案 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+"&param2="+param2,
    success: function(msg){
      f();
    }
  };
  var result=$.ajax(params).responseText;
}

应该有效。 你不能这样叫X:

X(param1,param2,function(){dowhatever})