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;
}

ここで、success 内で直接 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 に答える