【问题标题】:Sending JSON data containing a JavaScript function [duplicate]发送包含 JavaScript 函数的 JSON 数据 [重复]
【发布时间】:2014-07-24 15:45:52
【问题描述】:

我有一个对象,例如:

var object = { name: "lalala", alert: function(){ alert(this.name)} }

我想将它作为 JSON 发送到我的服务器(nodejs+express),但是我收到了这个解析器错误,我该怎么做?

JSON 示例:

{ "name": "lalala", "alert": "function"(){ "alert"("this.name") } }

【问题讨论】:

  • 您不能将函数作为 json 中的值发送
  • 那不是有效的 json。您可以做的最好的事情是将您的函数放在一个字符串中并对其进行评估,但这不是您真正应该做的事情。

标签: javascript json node.js


【解决方案1】:

您所拥有的不是有效的 JSON 对象。 JSON 中不能有函数。您正在使用 JavaScript 对象。查看JSON spec 以准确了解什么对 JSON 有效。


如果您真的想将该数据传递到您的服务器,则必须将值转换为字符串,然后在稍后阶段对其进行 eval (shudder)取回底层函数。

【讨论】:

    【解决方案2】:

    这种完全奇怪且不正确的 JSON 处理方式

    不能在 JSON 对象中包含函数

    这就是为什么你得到解析器错误...

    【讨论】:

      【解决方案3】:

      不要那样做。在json中发送alert的值,然后在另一端收到值时运行alert函数。

      var object = { name: "lalala", alert: "lalala"}
      
      alert(object.alert);
      

      编辑:其实你只需要

      var object = { name: "lalala"}
      

      收到回复时:

      alert(object.name);
      

      【讨论】:

      • 这真的有用吗?
      【解决方案4】:

      您可以使用以下技巧。

      var c = { "s" : "sss", "alert" : "alert(c.s)"}
      eval(c.alert);
      

      您会收到警报。但是它不会像这样飞行:

      eval("function(){alert(c.s);}")
      

      【讨论】:

        猜你喜欢
        • 2017-04-22
        • 2017-12-01
        • 2015-12-07
        • 1970-01-01
        • 2018-01-20
        • 1970-01-01
        • 2020-12-27
        • 2018-09-17
        • 2016-11-19
        相关资源
        最近更新 更多