我有一个表单,我将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脚本中)。
答案 0 :(得分:0)
你真正做到这一点的唯一方法是在JSON对象中返回文本中的javascript表达式(用双引号括起来)。然后你需要eval()响应,这个响应由于各种原因而不是很好 - 注入,性能,调试。
我建议反对这种方法,因为你重叠了客户端和服务器应该做的事情的界限 - 紧密耦合两个层。
答案 1 :(得分:0)
可以使用eval()
,但由于性能和安全原因,不推荐。 eval()
执行传递给它的参数。因此,您可以将jquery函数作为字符串发送,并将其传递给eval()
以在客户端执行它。
示例代码:
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;
答案 2 :(得分:0)
虽然通常不建议这样做,但可以从PHP脚本返回JavaScript代码,最好使用相应的Content-Type: text/javascript
标题。
在客户端,您可以使用eval
执行生成的代码,或者通过新创建的<script>
代码将其注入页面。
不鼓励动态脚本有以下几个原因:
此外,试图隐藏客户端代码已经失败了。如果代码是在客户端执行的,那么它是可见的客户端,期间。任何用户,我坚持认为,任何用户都可以打开浏览器的F12调试器并放置断点或使用逐步模式。更精明的用户可能会覆盖eval
函数或挂钩beforescriptexecute
事件以检查正在发生的事情。而且还有更多方法。
您可以做的最好的事情是对代码进行模糊处理,可能会降低性能并降低工作流程的复杂性。