Javascript 解析$(document).ready(function(){})中的函数指针;按json字符串名
在我的Javascript 解析$(document).ready(function(){})中的函数指针;按json字符串名,javascript,jquery,Javascript,Jquery,在我的$(文档)中有一个从服务器检索到的json对象,它有一个字符串,我想将该字符串解析为在$(document.ready(…)中定义的函数因此,例如: $(document).ready(function{ $.getJSON(/*blah*/,function(data){/*more blah*/}); function doAdd(left,right) { return left+right; } function doSub(lef
$(文档)中有一个从服务器检索到的json对象代码>,它有一个字符串,我想将该字符串解析为在$(document.ready(…)中定义的函数代码>因此,例如:
$(document).ready(function{
$.getJSON(/*blah*/,function(data){/*more blah*/});
function doAdd(left,right) {
return left+right;
}
function doSub(left,right) {
return left-right;
}
});
使用json字符串:
{"doAdd":{"left":10,"right":20}}
我考虑的一种方法是在加载json之前创建函数的关联数组:
var assocArray=...;
assocArray['doAdd'] = doAdd;
assocArray['doSub'] = doSub;
使用eval
或window[]()代码>不好,因为函数可能在一段时间内不会被调用,基本上我想链接/解析,但还没有执行。类似的东西怎么样
$(function(){
// Function to be called at later date
var ressolvedFunc = null;
// Ajax call
$.getJSON(/*blah*/,function(data){
// Generate one function from another
ressolvedFunc = (function(data) {
var innerFunc;
var left = data.left;
var right = data.right;
// Detect action
for (action in data) {
if (action == "doAdd")
innerFunc = function() {
return left + right;
};
else
innerFunc = function() {
return left - right;
};
}
return innerFunc;
})(data);
});
});
匿名函数返回新函数,新值存储在存储模块中。这应该允许您稍后使用先前从GET请求检索的数据调用函数
富将JSON更改为
{method: "doAdd", parameters : {"left":10,"right":20}}
那就做吧
var method = eval(json.method);
// This doesn't call it. Just gets the pointer
或者(没有试过这个)
试试这个:
var doX = (function() {
var
data = [],
getDo = function(action) {
for(var d in data) {
if (data[d][action]) {
return data[d];
}
}
return null;
};
return {
set: function(sdata) {
data.push(sdata);
},
doAdd: function() {
var add = getDo("doAdd");
if (!add)
return 0;
return add.doAdd.left + add.doAdd.right;
},
doSub: function() {
var sub = getDo("doSub");
if (!sub)
return 0;
return sub.doAdd.left + sub.doAdd.right;
}
};
})();
$(document).ready(function{
$.getJSON(/*blah*/,function(data){ doX.set(data); });
});
您是说函数是在Javascript中定义的,而参数是在JSON中定义的,还是函数本身是在JSON中定义的?@kojiro-函数是在javascriptI添加的方法和参数键中定义的,因为否则您必须使用if语句检查键是什么。可能不是你想要的。@Amir-谢谢,这样做了,也澄清了我对eval
-Frank的错误理解这个方法应该比eval
更受欢迎。@Frank-不客气。kojira是正确的,因为eval会引发很多安全问题。我会尝试这个,但它不起作用,尽管我的感知可能被48盎司的咖啡模糊了。我想你的意思是var func=this['funcName']
?这不是很清楚。如果我在一个函数中(即doAdd)。。。如果不调用它,从而使getDo
变得多余,那么我是如何做到这一点的?因为我现在扩展了对自动执行函数的理解,我可以欣赏您所做的。。。意味着culpa@Frank好的,没问题,我希望你为另一个人工作来解决问题或其他情况
var doX = (function() {
var
data = [],
getDo = function(action) {
for(var d in data) {
if (data[d][action]) {
return data[d];
}
}
return null;
};
return {
set: function(sdata) {
data.push(sdata);
},
doAdd: function() {
var add = getDo("doAdd");
if (!add)
return 0;
return add.doAdd.left + add.doAdd.right;
},
doSub: function() {
var sub = getDo("doSub");
if (!sub)
return 0;
return sub.doAdd.left + sub.doAdd.right;
}
};
})();
$(document).ready(function{
$.getJSON(/*blah*/,function(data){ doX.set(data); });
});