如何从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