我正在使用$ .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
}
}
如何编写函数名称为参数的行,我想将其作为参数传递给。
注意,此刻,我写的是这样的:
if (CallBackFunctionName === "SomeFunctionName1") {
SomeFunctionName1(TheData);
} else {
SomeFunctionName2(TheData);
}
答案 0 :(得分: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);
答案 1 :(得分: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)
}
}