2

我正在使用一个 $.ajax 函数,它有两个目的,根据上下文,我想在回调中执行不同的函数。

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 回答