如果我使用看起来像
的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();}
吗?
答案 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+"());");
}
最后的附加括号会立即执行您的功能。