Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS:使用变量名调用函数_Javascript_Jquery_Json_Function_Variables - Fatal编程技术网

Javascript JS:使用变量名调用函数

Javascript JS:使用变量名调用函数,javascript,jquery,json,function,variables,Javascript,Jquery,Json,Function,Variables,我正在使用jQuery。我有一个应用程序,它向服务器发出ajax请求,并用JSON进行响应 在某些情况下,服务器的响应将指示要调用的JS函数的名称 {"responseType":"callback", "callback":"STUFF.TestCallback","callbackData":"this is in the callback"} 如果响应类型如上所述为“callback”,则JSON将传递给一个函数以处理此响应类型。(var“response”包含上面的JSON) 但当我这

我正在使用jQuery。我有一个应用程序,它向服务器发出ajax请求,并用JSON进行响应

在某些情况下,服务器的响应将指示要调用的JS函数的名称

{"responseType":"callback", "callback":"STUFF.TestCallback","callbackData":"this is in the callback"}
如果响应类型如上所述为“callback”,则JSON将传递给一个函数以处理此响应类型。(var“response”包含上面的JSON)

但当我这样做时,我会得到错误“response.callback不是函数”


如果您对这一点不起作用的原因以及如何正确操作提出任何意见,我们将不胜感激

字符串是字符串,不是函数

response.callback()
不起作用,因为它与
“STUFF.TestCallback”(
不是
STUFF.TestCallback()

您可能希望数据的结构更像
“回调”:“TestCallback”
,然后执行以下操作:

STUFF[response.callback](response);

这里使用字符串访问
STUFF
的属性。(
foo.bar
foo['bar']
等效。)

字符串是字符串,而不是函数

response.callback()
不起作用,因为它与
“STUFF.TestCallback”(
不是
STUFF.TestCallback()

您可能希望数据的结构更像
“回调”:“TestCallback”
,然后执行以下操作:

STUFF[response.callback](response);
这里使用字符串访问
STUFF
的属性。(
foo.bar
foo['bar']
是等效的。)

您可能会这样做

var myfunction = eval(response.callback);
myfunction(response);
尽管一些javascript开发人员认为使用eval()是一种糟糕的风格。

您可能会这样做

var myfunction = eval(response.callback);
myfunction(response);
尽管一些javascript开发人员认为使用eval()是一种糟糕的风格。

您可以将“namespace.func”转换为如下调用:

STUFF.callback = function(response) {
  var fn = response.callback.split("."), func = window;
  while(func && fn.length) { func = func[fn.shift()]; }
  if(typeof func == 'function') {
    console.log("All Good")
    func(response);
  } else{
    console.log("Hmm... Cant find function", response.callback);
  }
}
它通过在函数循环时获取
window[“STUFF”]
然后获取
window[“STUFF”][“TestCallback”]
来获取函数,检查每个级别是否定义为防止出错。请注意,这也适用于任何级别的函数,例如
“STUFF.One.Two.func”
也适用。

您可以将该“namespace.func”转换为如下调用:

STUFF.callback = function(response) {
  var fn = response.callback.split("."), func = window;
  while(func && fn.length) { func = func[fn.shift()]; }
  if(typeof func == 'function') {
    console.log("All Good")
    func(response);
  } else{
    console.log("Hmm... Cant find function", response.callback);
  }
}

它通过在函数循环时获取
window[“STUFF”]
然后获取
window[“STUFF”][“TestCallback”]
来获取函数,检查每个级别是否定义为防止出错。请注意,这也适用于任何级别的函数,例如
“STUFF.One.Two.func”
也适用。

糟糕的样式。很难维持。很难调试。缓慢而低效。安全问题的好来源。糟糕的风格。很难维持。很难调试。缓慢而低效。安全问题的好来源。谢谢David!事后看来,这是完全有道理的!谢谢你,大卫!事后看来,这是完全有道理的!