如何从JSON字符串调用javascript函数?
如果我用jQuery做一个看起来像的AJAXpost
$.post('MyApp/GetPostResult.json', function(data) { // what goes here? });
结果看起来像
{ "HasCallback": true, "Callback": "function(){ alert('I came from the server'); }" };
那我该如何调用回调函数呢? 我可以写if(data.HasCallback){data.Callback();}
吗?
这应该工作:
function(data) { if(data.HasCallback) { eval(data.Callback); } }
编辑:看起来不够仔细。 如果你确实得到了function() { ... }
文本,那么你需要eval(data.Callback + "()")
。
eval("(" + functionDeclarationAsString + ")()");
而functionDeclaractionAsString
将是function(){ alert('I came from the server'); }
forms的东西function(){ alert('I came from the server'); }
function(){ alert('I came from the server'); }
编辑
符号(functionReference)(); 用于调用函数的引用。 以下内容有效:
(function() { alert('it works'); })();
以下也是有效的:
var my_function = function(param) { alert(param); }; (my_function)('this is a parameter');
将代码和数据分开是一个更好的主意。 要使用您的示例,为什么不使用这样的JSON:
{ "Message": "I came from the server" }
在你的JavaScript中:
$.post('MyApp/GetPostResult.json', function(data) { if (data.Message) { alert(data.Message); } });
您可以使用邪恶的eval
来执行给定的字符串作为代码:
if (data.HasCallback) { eval("("+data.Callback+"());"); }
最后的附加括号立即执行您的function。
记录在邪恶的w3schools