【问题标题】:Passing javascript code in JSON在 JSON 中传递 javascript 代码
【发布时间】:2010-02-06 08:04:18
【问题描述】:

我正在使用 jQuery 对 PHP 脚本进行 AJAX 调用,该脚本需要返回嵌入在 JSON 结果中的 javascript 代码,以便 jQuery 代码执行。如何在 JSON 中传递 javascript 代码?

【问题讨论】:

  • 您的 ajax 库应该支持 JSON 消息传递。你在用什么?
  • 你确定你真的需要密码吗?在大多数情况下,初始 JS 有效负载中的一些预先编写的函数与一些描述使用哪些参数运行哪个函数的数据相结合是更好的选择。
  • 我同意 David 和 Max S...不过,这是个好问题。
  • 好吧,只有服务器知道要执行什么javascript代码,它还不存在于客户端。这就是为什么我需要知道这一点。

标签: php javascript ajax json


【解决方案1】:

两种方式:

  1. 您必须将其作为字符串传递并在客户端使用eval()
  2. 您可以使用 JSONP,而不是进行调用,而是让您的客户端脚本插入一个 <script>,其 src 指向返回新脚本的服务器端代码。

在任何一种情况下,请确保妥善保护它 - 如果用户能够以某种方式将自己的代码插入到您的响应中,他们可能会造成一些损害。

【讨论】:

  • eval 是否比仅以标准方式包含脚本要慢?在您的两个建议中,哪个更好,为什么?
  • JSONP 会稍微快一些,并且使用得更频繁,但如果你不小心,它很容易受到 XSS 攻击。我自己,我不会选择任何一个,而是将描述我需要做什么的数据传递给一些现有函数(请参阅 David 对您的问题的评论)。
【解决方案2】:

JSON 的定义不允许传输 javascript 函数。它意味着与语言无关。如果您使用 JSON 解析器而不是 eval(),如果 JSON 包含任何函数,它将失败。

Douglas Crockford,我相信他创造了JSON 这个词有一个JSON parser for javascript

即使 JSONP 也不返回函数,而是函数调用 - myFuncIAskedFor({ returned JSON })
正如其他人所提到的,在本地定义你的函数,这是最安全的事情
也使用 JSON 解析器

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    • 2012-04-29
    • 2015-06-25
    • 2013-09-25
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    相关资源
    最近更新 更多