2

私は $.ajax 関数を使用しています。これは 2 つの目的を果たし、コンテキストに応じて、コールバックでさまざまな関数を実行したいと考えています。

function MyAjaxCall(SomeParameter, CallBackFunctionName) {

  $.ajax({
   ...
   success: function (msg) {

     var TheData = msg.hasOwnProperty("d") ? msg['d'] : msg;
     // here: "execute the function in parameter CallBackFunctionName 
     // AND pass it the parameter TheData
  }
}

関数の名前がパラメーターである行をどのように記述し、パラメーターとして TheData を渡したいですか。

現時点では、次のように書いていることに注意してください。

if (CallBackFunctionName === "SomeFunctionName1") {
   SomeFunctionName1(TheData);
} else {
   SomeFunctionName2(TheData);
}
4

2 に答える 2

4

関数がグローバル関数として定義されている場合は、次を使用します。

window[functionName](arguments);

そうでない場合は、次のようMyAjaxCallに呼び出される方法を変更します。

MyAjaxCall.apply(thisArg, [SomeParameter, CallBackFunction]); //thisArg is the value of the this object inside MyAjaxCall().

次に、内部でこれをMyAjaxCall()行います:

function MyAjaxXall(SomeParam, CallBackFunction){
  var me = this; //the object supplied through thisArg while calling.
  $.ajax({
     success : function(msg)
     {
         //whatever processing you want
         me[CallBackFunction](arguments);
     }

  });
}

または、次のパラメータの一部としてオブジェクトを追加できますMyAjaxCall()

function MyAjaxCall(SomeParam, obj, CallBackFunction)
{

      $.ajax({
         success : function(msg)
         {
             //whatever processing you want
             obj[CallBackFunction](arguments);
         }

      });
}

グローバル関数の呼び出しに使用する場合は、次を使用します。

MyAjaxCall(SomeParam, window, CallBackFunction);
于 2012-11-10T10:13:48.157 に答える
2

変数 CallBackFunctionName を介して名前が渡される定義済み関数がグローバルであると仮定すると、次のようにすることができます。

window[CallBackFunctionName](TheData)

実際の関数をMyAjaxCall次のように渡すこともできます。

var MyCallbackFunction = function(data){ console.log(data) }
MyAjaxCall({param1: 'value1'}, MyCallbackFunction)

このようにして、関数を実行することができます:

function MyAjaxCall(SomeParameter, CallBackFunction) {

  $.ajax({
   ...
   success: function (msg) {

     var TheData = msg.hasOwnProperty("d") ? msg['d'] : msg;
     CallBackFunction(TheData)
  }
}
于 2012-11-10T09:48:20.690 に答える