如何从JSON字符串调用javascript函数?

时间:2011-03-31 00:40:47

标签: javascript jquery ajax xmlhttprequest http-post

如果我使用看起来像

的jQuery做一个AJAX帖子
 $.post('MyApp/GetPostResult.json', function(data) {
    // what goes here?
 });

,结果看起来像

{
    "HasCallback": true,
    "Callback": "function(){ alert('I came from the server'); }"
};

然后如何调用回调函数?我可以写if(data.HasCallback){data.Callback();}吗?

4 个答案:

答案 0 :(得分:2)

这应该有效:

function(data) {
  if(data.HasCallback) {
    eval(data.Callback);
  }
}

编辑:看起来不够仔细。如果您确实收到function() { ... }文字,则需要eval(data.Callback + "()")

答案 1 :(得分:1)

eval("(" + functionDeclarationAsString + ")()");

functionDeclaractionAsString将是某种形式的东西 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');

答案 2 :(得分:1)

将代码和数据分开是一个更好的主意。要使用您的示例,为什么不使用这样的JSON:

{
    "Message": "I came from the server"
}

在你的JavaScript中:

$.post('MyApp/GetPostResult.json', function(data) {
    if (data.Message) {
        alert(data.Message);
    }
});

答案 3 :(得分:0)

您可以使用邪恶的eval执行给定的字符串作为代码:

if (data.HasCallback) {
  eval("("+data.Callback+"());");
}

最后的附加括号会立即执行您的功能。

Documented at the evil w3schools