将 PHP 变量传递给 JavaScript

IT技术 php javascript
2021-03-05 18:25:42

我有一个 PHP 会话变量 ,$_SESSION['user']在整个会话期间都处于活动状态。在 head 部分,我包含了我的 JavaScript 文件,scripts.js.

如果我想要类似以下内容,如何将会话变量传递到 JavaScript 文件中。

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

由于<?php ?>JavaScript 文件中无法识别 ,因此上面的代码不起作用。所以我必须放入 PHP 文件本身,但如何将它保存在 JavaScript 文件中?

5个回答

在您的 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)

这会是你的一个选择吗?

-1 如果$_SESSION['user']有单引号或者它的编码与网页的编码不同,这将不起作用最好的解决方案是使用json_encode.
2021-04-20 18:25:42
为什么?唯一可能发生的事情是,全局变量与某个框架中的某个现有变量混合在一起。为了防止您这样做,很容易创建您自己的命名空间对象来存储您的全局变量。我编辑了这个问题以展示如何。
2021-04-24 18:25:42
@Arteactojson_encode似乎只$_SESSION['user']在以 UTF-8 编码时才有效,否则操作将失败。addslashes()可以使用修复引用问题
2021-04-29 18:25:42
好的,创建自己的命名空间对象肯定会降低混淆的风险。但是在你的回答中你没有使用一个......;)
2021-05-11 18:25:42
我不会那样做。全局 JavaScript 变量几乎总是一个坏主意。
2021-05-12 18:25:42

在文件中隐藏的输入类型中设置用户 ID(在 PHP 中)。在您的 JavaScript 代码中,您可以读取隐藏的输入类型值。

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

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

尝试以下逻辑

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

将包含的 JavaScript 文件解析为 PHP

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

AddHandler php-cgi .js

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

使用 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。