【问题标题】:Passing PHP variable into JavaScript [duplicate]将 PHP 变量传递给 JavaScript [重复]
【发布时间】:2011-03-15 10:11:40
【问题描述】:

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

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

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

由于在 JavaScript 文件中无法识别 &lt;?php ?&gt;,因此上面的代码不起作用。所以我必须把 PHP 文件本身放进去,但是我如何将它保存在 JavaScript 文件中呢?

【问题讨论】:

    标签: php javascript


    【解决方案1】:

    在您的 PHP 文件中,您可以将您的用户设置为全局变量:

    <script type="text/javascript">
        var ptamzzNamespace = {
           sessionUser : '<?php echo $_SESSION['user']; ?>'
        }        
    </script>
    

    在包含您的外部 JavaScript 代码之前包含此内容。

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

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

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

    &lt;?php echo addslashes($_SESSION['user']); ?&gt; 即使这可能会产生您不想显示的内容(因为它会产生带有斜杠的字符串),但它有助于您的代码不会失败。 (感谢 Artefacto)

    这对你来说是一个选择吗?

    【讨论】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        试试下面的逻辑

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

        【讨论】:

          【解决方案5】:

          将包含的 JavaScript 文件解析为 PHP

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

          AddHandler php-cgi .js
          

          &lt;?php ?&gt; 标签到现在为止都可以被您的 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。

          【讨论】:

            猜你喜欢
            • 2014-01-11
            • 2016-02-23
            • 1970-01-01
            • 2012-04-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多