是否可以在JSON响应中获取jQuery函数?

时间:2017-07-14 14:00:34

标签: php jquery json ajax

我有一个表单,我将jQuery post函数发送到php脚本。

在php脚本中,我做了一些检查,然后发送回一个带有这样的结构的响应:

$output = json_encode(array('type'=>'error', 'text' => 'your id is wrong!'));
die($output);

在我有表单的页面中,我可以使用一种简单的方法根据响应触发一些函数。例如:

if(response.type == 'error'){
output = '<div class="clienConError">'+response.text+'</div>';
$(".results").hide().html(output).slideDown();
}

表示如果将响应设置为错误类型,则执行此操作并且...

我的问题是: 是否可以发送回jQuery函数?所以不要说:如果它是一个响应设置为错误类型,请执行此操作。我说不管它是什么反应,只需做响应告诉你的事情(例如隐藏一些元素,在某些地方注入一些html等等......各种jQuery函数)。

如果有可能,它会给我一些好处。其中之一就是能够实际隐藏一些jQuery函数(在php脚本中)。

3 个答案:

答案 0 :(得分:0)

你真正做到这一点的唯一方法是在JSON对象中返回文本中的javascript表达式(用双引号括起来)。然后你需要eval()响应,这个响应由于各种原因而不是很好 - 注入,性能,调试。

我建议反对这种方法,因为你重叠了客户端和服务器应该做的事情的界限 - 紧密耦合两个层。

答案 1 :(得分:0)

可以使用eval(),但由于性能和安全原因,不推荐eval()执行传递给它的参数。因此,您可以将jquery函数作为字符串发送,并将其传递给eval()以在客户端执行它。

示例代码:

&#13;
&#13;
var command= 'var output = \'<div class="clienConError">Here is the response</div>\';$(".results").hide().html(output).slideDown();'
eval(command);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class='results'></div>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

虽然通常不建议这样做,但可以从PHP脚本返回JavaScript代码,最好使用相应的Content-Type: text/javascript标题。

在客户端,您可以使用eval执行生成的代码,或者通过新创建的<script>代码将其注入页面。

不鼓励动态脚本有以下几个原因:

  1. 难以维护:生成的代码本质上不是静态的,因此您永远不会像使用静态文件一样查看和编辑整个代码。
  2. 从安全的角度来看,最好的草率:允许执行任意代码绝不是一个好主意,攻击者肯定会尝试利用它来执行客户端攻击,如XSS。
  3. 对优化器不友好:与整个静态脚本相反,一旦文件加载完毕就可以解析和优化,脚本的多个碎片不能从优化中受益。
  4. 此外,试图隐藏客户端代码已经失败了。如果代码是在客户端执行的,那么它是可见的客户端,期间。任何用户,我坚持认为,任何用户都可以打开浏览器的F12调试器并放置断点或使用逐步模式。更精明的用户可能会覆盖eval函数或挂钩beforescriptexecute事件以检查正在发生的事情。而且还有更多方法。

    您可以做的最好的事情是对代码进行模糊处理,可能会降低性能并降低工作流程的复杂性。