fnObj=window[functionName]不是函数问题-eval()运行良好
fnObj = window[functionName] is not a function issue - eval() works well
我只是过度使用JS代码,希望用window[functionName]
替换我的eval()
。所以我只是在JSFiddle中进行了一个快速测试,所有测试都能很好地使用以下行:
var fnName = "Page_test";
var foo = "yammy";
var Page_test = function(bar) {
return bar;
}
var Obj = window[fnName];
alert(Obj(foo));
(链接到此JSFiddle->http://jsfiddle.net/juSHj/)
现在,我尝试用具有上述概念的邪恶eval()
替换以下代码行:
旧代码:(像符咒一样工作/在ajax成功后被解雇(
...
success: function(ret) {
if(returnFnAjaxForm != "") {
eval(returnFnAjaxForm+"('"+encodeURI(jQuery.trim(ret))+"')");
}
}
...
新代码:
返回:未捕获的类型错误:object[object的属性'dummyFn'Window]不是的功能
...
success: function(ret) {
if(returnFnAjaxForm != "") {
fnObj = window[returnFnAjaxForm];
if(typeof(fnObj) == "function") { // this is optional
fnObj(encodeURI(jQuery.trim(ret)));
}
}
}
...
我很好奇我在哪里犯了错。是的,我试图激发的函数存在,并且是用var
定义的。这个概念是否不可能在ajax响应中使用?
谢谢你的帮助。
(使用jQuery(
如果在闭包中声明函数,则它不是窗口的成员。示例:
var in_window = '132';
alert(window['in_window']); // Alert 132
(function() {
var not_in_window = '132';
alert(window['not_in_window']); // Alert undefined
})();
因此,请注意声明Page_test
变量的位置。若你们真的想放在窗口里,你们可以做window.Page_test = Page_test
。
你能做的最好的事情就是为所有可能的回调使用一个对象。像这样:
var callbacks = {
foo : function() {},
foo1 : function() {},
foo2 : function() {},
foo3 : function() {}
};
var obj = callbacks[fnName];
相关文章:
- 在指令控制器中使用$attrs时出现问题
- 将PHP变量传递给jQuery时遇到问题
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- 参数变量出现ngTable指令问题
- 剑道网格jQuery动画()问题
- 我的jQuery插件参数没有正确启动,遇到了问题
- Phonegap-(安卓/iphone)多个图像的图像库出现问题
- TableExport jquery插件:文件名和扩展名问题
- 递归使用 eval() 是检查程序执行的好方法吗?
- JavaScript Pub/Sub属性访问问题
- JavaScript异步问题
- 如何修复由于在java脚本中使用eval()而在强化扫描中的动态代码评估问题
- Javascript-在包含数学运算的安全字符串上使用eval的问题
- 使用eval()执行用户提供的代码的问题
- javascript 中的 eval() 问题
- .each()和eval()的问题
- JS eval安全问题
- 使用eval和alternative解析大型json时出现问题
- fnObj=window[functionName]不是函数问题-eval()运行良好
- Javascript,又一个“太多的递归”问题:复仇的邪恶eval()