2011-03-15 131 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>