由于我知道很多人考虑在Javascript代码中使用PHP代码不好的做法,我想知道如何执行一个javascript函数,只要某个PHP变量具有一定的值。
这是我目前编写代码的方式:
<script type="text/javascript">
function execute_this() {
some code;
}
<?php
if(!empty($_SESSION['authorized'])) :
?>
execute_this();
<?php
endif;
?>
</script>
在这个特定的例子中,如何避免在Javascript中使用PHP?
答案 0 :(得分:2)
如果您不想在javascript代码中包含任何PHP代码但想知道php变量的值,则必须集成服务器端(PHP)和客户端(JS)之间的通信
例如,您可以使用ajax请求来调用在其回复中提供值的小型PHP代码段。有了这个值,你可以继续使用java脚本代码。
在我看来,你应该决定它是否值得努力。
编辑:
关于编辑过的问题:如果在PHP会话值不存在的情况下永远不会调用JS函数很重要,那么我将继续使用PHP代码但是会这样做:
<?php
if(!empty($_SESSION['authorized'])) :
?>
<script type="text/javascript">
function execute_this() {
some code;
}
execute_this();
</script>
<?php
endif;
?>
如果你在javascript中评估会话变量的值,你必须确保如果操作提供的值,你的代码不会发生任何不良。
答案 1 :(得分:1)
你必须将php变量存储在html代码中的某个位置,然后才能访问它。 例如:
<input type="hidden" id="hidval" value=<?php echo $_SESSION['authorized'] ?>/>
然后在你的js:
var somevar=document.getElementById(hidval).value;
if(somevar==what you want){
execute_this();
}
答案 2 :(得分:1)
这是代码风格的问题。您的项目增长的时间,您将发现维护它或扩展其功能越来越困难。更好的解决方案是在文件开头初始化所有需要的变量,并外化主JavaScript功能。
示例PHP:
<script type="text/javascript">
MYCONFIG = {
authorized: '<?php echo $_SESSION['authorized']; ?>',
foo: 'something else'
}
$(document).trigger('init'); // fire init event, you can call it as you like
</script>
使用jQuery的JS示例(请注意,我使用自定义触发器'init',您可以随意调用它):
$(document).on('init', function() {
function execute_this() {
document.write(MYCONFIG.foo);
}
if(MYCONFIG.authorized) {
execute_this();
}
})
这应该在外部JS文件中,不需要任何PHP标记。
答案 3 :(得分:1)
我认为你有一些基本的设计问题,我们只是看到冰山一角,无法完全帮助你。
以这种方式调用php函数没有任何内在错误,但是你有几个问题:
1)你不能分开你的js文件&amp;允许缓存或cdn
2)虽然MVC肯定不是“强制性的”,但尝试将这种类型的逻辑与“视图”分离 - 你的渲染输出
绝对是一个好主意。3)我怀疑你在其他地方有一个巨大的安全漏洞 - 如果你根据他们的会话中是否“授权”设置某些参数,这意味着你很可能会发回在某处的PHP代码中基于权限决定的信息。永远不要在页面上这样做 - 所有数据都应该在页面上“中立”,因为你无法控制它。
如果您不清楚为什么我这么说,请将此读一读:http://www.codebyjeff.com/blog/2012/12/web-form-security-avoiding-common-mistakes
答案 4 :(得分:0)
有三种可能的方法。