Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在JSON中传递javascript代码_Php_Javascript_Ajax_Json - Fatal编程技术网

Php 在JSON中传递javascript代码

Php 在JSON中传递javascript代码,php,javascript,ajax,json,Php,Javascript,Ajax,Json,我使用jQuery对PHP脚本进行AJAX调用,该脚本需要返回嵌入JSON结果中的javascript代码,以便jQuery代码执行。如何在JSON中传递javascript代码?有两种方法: 您必须将其作为字符串传递,并在客户端使用eval() 您可以使用JSONP,让客户端脚本插入一个,其src指向返回新脚本的服务器端代码,而不是执行调用 无论是哪种情况,都要确保它的安全性——如果用户能够以某种方式将自己的代码插入到您的响应中,他们可能会造成一些损害。JSON的定义不允许传输javascri

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

有两种方法:

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

  • 无论是哪种情况,都要确保它的安全性——如果用户能够以某种方式将自己的代码插入到您的响应中,他们可能会造成一些损害。

    JSON的定义不允许传输javascript函数。它应该是独立于语言的。如果您使用JSON解析器而不是eval(),那么如果JSON包含任何函数,它将失败

    道格拉斯·克罗克福德,我相信是他创造了这个词

    甚至JSONP也不返回函数,而是返回函数调用-
    myFuncIAskedFor({returned JSON})

    正如其他人所提到的,在本地定义函数是最安全的做法

    还要使用JSON解析器

    您的ajax库应该支持JSON消息传递。你在用什么?你确定你真的需要传递代码吗?在大多数情况下,初始JS负载中的一些预先编写的函数与一些数据相结合,这些数据描述了使用哪些参数运行哪个函数是更好的选择。。。然而,好问题是,只有服务器知道要执行什么javascript代码,但它在客户端中还不存在。这就是为什么我需要知道这一点。eval是否比标准方法中只包含脚本慢?您的两个建议中,哪一个更好?为什么?JSONP会稍微快一点,并且使用得更频繁,但如果您不小心,它会受到XSS攻击。就我自己而言,我不会使用这两种方法,而是传递描述我需要对某些现有函数执行哪些操作的数据(参见David对您的问题的评论)。