2

由于我知道很多人认为在 Javascript 代码中使用 PHP 代码是不好的做法,我想知道如果某个 PHP 变量具有某个值,如何执行 javascript 函数。

这是我目前编写代码的方式:

<script type="text/javascript">
function execute_this() {
some code;
}
<?php
if(!empty($_SESSION['authorized'])) :
?>
execute_this();
<?php
endif;
?>
</script>

在这个特定示例中如何避免在 Javascript 中使用 PHP 的任何想法?

4

5 回答 5

2

If you don't want to include any PHP code inside the javascript code but want to know the value of a php variable, you have to integrate a communication between the server side (PHP) and the client (JS)

For example you could use a ajax request to call a small php snippet that provides the value in its reply. With that value you can go on in you java script code.

In my opinion you should decide if its worth the effort.

Edit:

In regard to the edited question: If it is important that the JS function is never ever called if the PHP session value isn't present I would stay with the PHP code but would do it that way:

<?php
if(!empty($_SESSION['authorized'])) :
?>
<script type="text/javascript">
function execute_this() {
some code;
}

execute_this();
</script>
<?php
endif;
?>

If you evaluate the value of the session variable in javascript, you have to make sure that nothing bad happens to your code if the provided value was manipulated.

于 2013-02-13T09:14:25.893 回答
1

You have to store the php variables somewhere in the html code and then access it. For example:

<input type="hidden" id="hidval" value=<?php echo $_SESSION['authorized'] ?>/>

then in your js:

var somevar=document.getElementById(hidval).value;
if(somevar==what you want){
  execute_this();
}
于 2013-02-13T09:15:28.443 回答
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>

带有 jQ​​uery 的示例 JS(请注意,我使用自定义触发器“init”,您可以随意调用它):

$(document).on('init', function() {

    function execute_this() {
        document.write(MYCONFIG.foo);
    }

    if(MYCONFIG.authorized) {
        execute_this();
    }

})

这应该在外部 JS 文件中,不需要任何 PHP 标记。

于 2013-02-13T09:21:50.373 回答
1

我认为你有一些基本的设计问题,我们只是看到了冰山一角,不能完全帮助你。

以这种方式调用 php 函数本身并没有错,但是您有几个问题:

1)你不能分离你的js文件并允许缓存或cdn

2)虽然 MVC 肯定不是“强制性的”,但尝试将这种类型的逻辑与您的“视图”分开绝对是一个好主意 - 您的渲染输出

3)我怀疑在其他地方你有一个巨大的安全漏洞——如果你根据他们在他们的会话中是否被“授权”来设置某些参数,这意味着你很可能会发回信息来作为你的权限决定的基础php代码某处。永远不要在页面上这样做——所有数据在页面本身上都应该是“中立的”,因为你无法控制它。

如果您不清楚我为什么这么说,请阅读此内容:http: //www.codebyjeff.com/blog/2012/12/web-form-security-avoiding-common-mistakes

于 2013-02-13T09:30:55.183 回答
0

有三种可能的方法来做到这一点。

  1. 使用隐藏字段并在每个字段中添加必要的变量值并使用 jQuery 获取那些。
  2. 用户 jQuery Session 插件和访问 php session 变量。
  3. 对 php 进行 ajax 调用并以 json 格式获取响应并访问响应。
于 2013-02-13T09:21:11.023 回答