在Javascript代码中使用PHP代码

时间:2013-02-13 09:09:28

标签: php javascript

由于我知道很多人考虑在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?

5 个答案:

答案 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)

有三种可能的方法。

  1. 使用隐藏字段并在每个字段中添加必要的变量值,并使用jQuery获取它们。
  2. 用户jQuery Session插件并访问php会​​话变量。
  3. 对php进行ajax调用并以json格式获取响应并访问响应。