【问题标题】:Javascript: call a specific function on function completeJavascript:在函数完成时调用特定函数
【发布时间】:2010-10-28 11:51:45
【问题描述】:

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

【问题讨论】:

    标签: javascript jquery function anonymous


    【解决方案1】:

    你像这样声明你的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

    【讨论】:

    • 传奇,应该可以。我不确定语法。非常感谢,
    【解决方案2】:
    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})
    

    【讨论】:

    • 您好,感谢您的回复。 T.J.上面的 Crowder 提出了一种调用 X 的好方法,同时充分利用了匿名函数。
    • @Eamorr 我的代码完全一样,唯一的区别是在我的代码中`callback`被命名为`f`:)
    猜你喜欢
    • 2020-07-12
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    相关资源
    最近更新 更多