将PHP变量传递给JavaScript

8

我有一个PHP会话变量,$_SESSION['user'],在整个会话期间保持有效。在头部区域,我包含了我的JavaScript文件scripts.js

如果我想要像以下这样的东西,该如何将会话变量传递到JavaScript文件中:

$.("#btn').click (
     function() {
        alert('<?php echo $_SESSION['user']; ?>');
     }
)

由于JavaScript文件中无法识别<?php ?>,因此上面的代码无法工作。所以我必须将其放在PHP文件本身中,但是如何将其保留在JavaScript文件中呢?

5个回答

14
在你的PHP文件中,你可以将你的用户设置为全局变量:
<script type="text/javascript">
    var ptamzzNamespace = {
       sessionUser : '<?php echo $_SESSION['user']; ?>'
    }        
</script>

在引入你的外部JavaScript代码之前,先引入这个。

然后在你的JavaScript文件中可以使用它:

$.("#btn').click (
     function() {
        alert(ptamzzNamespace.sessionUser);
     }
)

另外: 如果您不确定您的会话变量本身是否包含引号,您可以使用addslashes()来解决这个问题:

<?php echo addslashes($_SESSION['user']); ?> 即使这可能会产生一些您不想要显示的内容(因为它会生成一个带有斜杠的字符串),但它将帮助您的代码不会出错。(感谢 Artefacto)

这对您是否可行?


3
我不会那样做。全局 JavaScript 变量几乎总是个坏主意。 - philonous
1
为什么要这样做呢?唯一可能发生的事情就是全局变量与某个现有框架中的变量混淆。为了避免出现这种情况,最好创建自己的命名空间对象来存储全局变量。我编辑了问题以展示如何实现。 - Chris
好的,创建自己的命名空间对象确实可以减轻混淆的风险。但是在你的回答中,你没有使用它... ;) - philonous
-1 如果 $_SESSION['user'] 中包含单引号或编码与网页不同,则此方法无法正常工作。最佳解决方案是使用 json_encode - Artefacto
@Artefacto 如果 $_SESSION['user'] 不是以 UTF-8 编码,那么 json_encode 似乎无法正常工作,操作会失败。为了解决引号问题,可以使用 addslashes() 函数。 - Chris

3

在你的文件中,使用一个隐藏的输入框来设置userID(在PHP中)。在JavaScript代码中,你可以读取这个隐藏输入框的值。


1

您可以将服务器设置为将 .js 文件解析为 PHP。例如,在 Apache 配置文件或 .htaccess 文件中:

<FilesMatch "scripts.js">
    AddHandler application/x-httpd-php5 .js
</FilesMatch>

0

将包含的 JavaScript 文件解析为 PHP

在您的 JavaScript 目录中创建一个 .htaccess 文件,并添加以下行。

AddHandler php-cgi .js

到目前为止,您的JavaScript文件已经识别了<?php ?>标签。

使用Ajax获取用户ID

创建一个名为getID.php的文件,它只回显用户ID。然后在您的JavaScript文件中,您可以使用以下代码:

$.get('getID.php', function(uid) {
  alert('User ID is:' + uid);
});

请在包含 JavaScript 打印用户 ID 之前创建一个脚本标签。
<script type="text/javascript">
userID = <?php echo $_SESSION['user']; ?>;
</script>

现在,您将可以使用变量userID访问用户ID。


0

尝试使用以下逻辑

print ' <script type="text/javascript" language="javascript"> 
function checkForm() 
{ 
     var username = "'.$_SESSION['user'].'"; 
     if( username == '') 
     { 
        alert('No Times selected'); 
        return false; 
      }
}
</script>';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接