如何拨打以下电话?
var ccall="search.clearMultiSelect";
我尝试了以下内容:
window[ccall]();
ccall();
两者都不起作用(我明白了)。我能够通过eval实现它,但是没有使用eval还有其他方法吗?
除了在开头或结尾添加内容之外,我无法拆分字符串或操纵字符串。
基本上,服务器在其响应中包含操作成功时要执行的函数的名称,在这种情况下如上所述。
答案 0 :(得分:3)
window[ccall]()
无效,因为窗口不包含名称为“search.clearMultiSelect”的函数。如果您可以使用拆分,请尝试以下方法:
window[ccall.split('.')[0]][ccall.split('.')[1]]();
对于深度大于2的函数,您可以遍历split('.')
数组:
var f = window;
var ccallArray = ccall.split('.');
for (var i = 0; i < ccallArray.length; i++){
f = f[ccallArray[i]];
}
f();
答案 1 :(得分:2)
您必须拥有有限数量的函数才能调用。
为了防范eval问题,您可以手动执行:
if (ccall == "search.func1") func1();
else if (ccall == "search.func2") func2();
else if ....
不是一个非常令人兴奋的答案,但它应该有效并避免评估。
这也会分离您的客户端和服务器。
服务器可以发送回search.func1,而客户端决定通过调用newfunc1()来响应,反之亦然。
答案 2 :(得分:1)
您可以沿着'。'拆分字符串。然后使用[]。
重复查找答案 3 :(得分:-3)
您可以使用eval()。
这是一个小例子:
var myFunction = "alert('test');";
eval(myFunction);
以下是测试上述示例的链接: