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

发布于 2024-10-28 11:34:22 字数 355 浏览 1 评论 0原文

如果我使用 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();} 吗?

If I do an AJAX post with jQuery that looks like

 $.post('MyApp/GetPostResult.json', function(data) {
    // what goes here?
 });

and the result looks like

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

Then how do I call the Callback function? Can I just write if(data.HasCallback){data.Callback();} ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

谁的年少不轻狂 2024-11-04 11:34:22

这应该有效:

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

编辑:看起来不够仔细。如果您确实获得了 function() { ... } 文本,那么您需要 eval(data.Callback + "()")

This should work:

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

Edit: Didn't look quite carefully enough. If you're indeed getting the function() { ... } text, then you need to eval(data.Callback + "()").

枯寂 2024-11-04 11:34:22
eval("(" + functionDeclarationAsString + ")()");

functionDeclaractionAsString 的形式为
function(){alert('我来自服务器'); }

编辑

符号 (functionReference)();用于调用函数的引用。以下内容将是有效的:

(function() { alert('it works'); })();

以下内容也将是有效的:

var my_function = function(param) { alert(param); };
(my_function)('this is a parameter');
eval("(" + functionDeclarationAsString + ")()");

while functionDeclaractionAsString would be something in the form of
function(){ alert('I came from the server'); }

EDIT

The notation (functionReference)(); is used to call a reference to a function. The following would be valid:

(function() { alert('it works'); })();

The following also would be valid:

var my_function = function(param) { alert(param); };
(my_function)('this is a parameter');
已下线请稍等 2024-11-04 11:34:22

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

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

在您的 JavaScript 中:

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

It's a better idea to keep code and data separate. To use your example, why not have JSON like this:

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

And in your JavaScript:

$.post('MyApp/GetPostResult.json', function(data) {
    if (data.Message) {
        alert(data.Message);
    }
});
诠释孤独 2024-11-04 11:34:22

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

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

末尾的附加括号立即执行您的函数。

记录在邪恶的 w3schools

You can use the evil eval to execute the given string as code:

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

The additional parentheses at the end execute your function immediately.

Documented at the evil w3schools

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文