2011-03-15 116 views
8

我有一个PHP会话变量,$_SESSION['user'],在整个会话中保持活动状态。在头部分,我已经包含了我的JavaScript文件,scripts.js将PHP变量传递到JavaScript

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

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

由于<?php ?>没有JavaScript文件中承认,上面的代码不起作用。所以我必须自己放入PHP文件,但是如何将它保存在JavaScript文件中?

回答

14

在你的PHP文件,你可以设置你的用户作为一个全球性varibale:

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

包括您的外部JavaScript代码之前包括此。

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

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

此外: 如果你不知道你的会话varibale可以包含引号itsself,您可以使用addslashes()来解决这个问题:

<?php echo addslashes($_SESSION['user']); ?>即使这可能会产生一些你不想显示的东西(因为它会产生一个带有斜线的字符串),这将有助于你的代码不会失败。 (感谢Artefacto)

这是您的选择吗?

+3

我不会这样做。全局JavaScript变量几乎总是一个坏主意。 – philonous 2011-03-15 10:18:45

+1

为什么?唯一可能发生的事情是,全局变量与某个框架中现有的某个混合在一起。为了防止你从这个容易创建你自己的命名空间对象来存储你的全局变量。我编辑了这个问题来展示如何。 – Chris 2011-03-15 10:23:30

+0

好的,创建一个自己的命名空间对象绝对可以减少混合某些东西的风险。但在你的答案中,你没有使用一个......;) – philonous 2011-03-15 10:30:18

0

解析包含的JavaScript文件作为PHP

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

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> 

现在,您将有机会获得使用可变用户ID的用户ID。

2

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

+0

不是一个坏主意! – Chris 2011-03-15 10:33:15

0

尝试下面的逻辑

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

你可以设置你的服务器来解析.js文件作为PHP。例如,在Apache配置或。htaccess文件:

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