wil*_*ber 4 javascript ajax jquery
我只是过度使用我的JS代码,并希望用我eval()的代码替换window[functionName].所以我刚刚在JSFiddle中进行了快速测试,并且所有方法都适用于以下几行:
var fnName = "Page_test";
var foo = "yammy";
var Page_test = function(bar) {
return bar;
}
var Obj = window[fnName];
alert(Obj(foo));
Run Code Online (Sandbox Code Playgroud)
(链接到这个JSFiddle - > http://jsfiddle.net/juSHj/)
现在我尝试eval()用以上概念替换以下代码行:
旧代码:(工作就像魅力/ ajax成功后解雇)
...
success: function(ret) {
if(returnFnAjaxForm != "") {
eval(returnFnAjaxForm+"('"+encodeURI(jQuery.trim(ret))+"')");
}
}
...
Run Code Online (Sandbox Code Playgroud)
新代码:
返回:未捕获TypeError:对象[对象窗口]的属性'dummyFn'不是函数
...
success: function(ret) {
if(returnFnAjaxForm != "") {
fnObj = window[returnFnAjaxForm];
if(typeof(fnObj) == "function") { // this is optional
fnObj(encodeURI(jQuery.trim(ret)));
}
}
}
...
Run Code Online (Sandbox Code Playgroud)
我很好奇我犯了哪些错误.是的,我尝试触发的功能存在并定义为var.这个概念可能无法在ajax响应中使用它吗?
谢谢你的帮助.
(使用jQuery)
Mag*_*gus 11
如果在闭包中声明函数,它不是窗口的成员.示例:
var in_window = '132';
alert(window['in_window']); // Alert 132
(function() {
var not_in_window = '132';
alert(window['not_in_window']); // Alert undefined
})();
Run Code Online (Sandbox Code Playgroud)
因此,请注意声明Page_test变量的位置.如果你真的想放在窗口,你可以做到window.Page_test = Page_test.
您可以做的最好的事情是使用一个对象来进行所有可能的回调.像这样 :
var callbacks = {
foo : function() {},
foo1 : function() {},
foo2 : function() {},
foo3 : function() {}
};
var obj = callbacks[fnName];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8327 次 |
| 最近记录: |