javascript - 通过 AJAX 传递带有函数的 JSON

标签 javascript json ajax

很简单,我想“重新水化”从 AJAX 传递的函数,如下所示:

//AJAX response:
{"foo":"bar","baz":"function(){console.log('I am back working as a function!');}"}

显然,baz 应该是一个函数而不是字符串。我该怎么做?

最佳答案

正如 Jozef 已经建议的那样,您可以使用 eval()

但是,如果您通过 Google 搜索,您会发现不建议使用该功能:

  1. > https://javascriptweblog.wordpress.com/2010/04/19/how-evil-is-eval/
  2. > When is JavaScript's eval() not evil?
  3. > https://javascriptweblog.wordpress.com/2010/04/19/how-evil-is-eval/
  4. > Why is using the JavaScript eval function a bad idea?

正如这个博客所建议的那样 ( http://2ality.com/2014/01/eval.html ) 我会推荐你​​使用这个:

let json = {"foo":"bar","baz":"function(){console.log('I am back working as a function!');}"};

let func = new Function("console.log('I am back working as a function!');");
func();

如果您无法更改您的 json,您可以简单地使用 str.replace()


请记住,可以执行任意代码! 我会强烈建议您这样做,例如……像这样而不是仅仅用一个函数来响应。通过执行以下操作,您将进行某种白名单。因此,无论 http-response 是否被操纵,攻击者都只能执行预定义的 javascript 函数。

function func1() {
  console.log('I am back working as a function!');
}

function func2() {
  console.log('another code block');
}

let json = {"foo":"bar","baz":"1"};

switch(json.baz) {
  case "1": func1();break;
  case "2": func2();break;
  default: console.error("Invalid response");
}

希望对您有所帮助。

关于javascript - 通过 AJAX 传递带有函数的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52572068/

相关文章:

javascript - 为什么它显示 Nodejs 的待处理 promise

Javascript 相当于 Python 的 locals()?

javascript - 如何使用 java 脚本突出显示 div 中特定字符串的所有出现?

javascript - 格式化 JSON 数据并将其附加到 html div

javascript - 获取 Post angular 2 toPromise HTTP

Javascript 仅在复选框有值时才显示?

javascript - Google 云端硬盘脚本不起作用,

c# - 如何使 JSON 文件成为 Visual Studio 2012 中项目的一部分

php - AJAX 请求返回某种形式的长字符串

javascript - 将代码移至函数中。现在不行了。怎么了?