2010-03-01 99 views
0

我想弄清楚如何將我的session_id變量設置爲在外部js文件中使用。這是我的。如何爲外部javascript文件設置變量?

php文件:

$output = '<script src="test.js"> 
    var session_id = '.$_SESSION['id'].' 
</script>'; 
print $output; 

js文件:

alert(session_id); 

有了這個我得到一個錯誤說SESSION_ID沒有定義。有沒有辦法將這些信息傳遞給對方?

我知道我可以設置一個隱藏的輸入信息,但我認爲有一個更好的方法。

+0

不管你如何生成的,生成的文本必須是有效的JavaScript代碼:比較警報(SESSION_ID)與alert(「session_id」) – 2010-03-01 17:23:21

回答

2

哼,怎麼樣:

$output = '<script type="text/javascript> var session_id = '.$_SESSION['id'].'</script><script type="text/javascript" src="test.js"></script>'; 
print $output; 

+0

小寫字母:刪除「。「$ _SESION ['id']後面並使用$ _SESSION ['id']而不是$ _SESION ['id'];) – Select0r 2010-03-01 17:02:29

+0

Woops。謝謝您的注意! – 2010-03-01 17:22:18

0

<script>標籤中的內容僅在JavaScript文件爲而非時纔會執行。設置在一個獨立的<script>標籤的變量有沒有文件集之前:

<script> 
    var session_id = '<?=$_SESSION['id']?>'; 
</script> 
<script src="test.js"> 
</script> 
1

如果你能處理SESSION_ID作爲一個全局變量,那麼下面將做到這一點:

<script> 
    var session_id = '<?php echo $_SESSION['id'];?>' 
</script> 
<script src="test.js"></script> 

如果你想要使變量僅在JavaScript文件中可用於閉包等,您可以通過PHP解析器發送js文件或爲您的js文件使用參數,但後者實際上並非易於從javascript訪問,請參見my question about that

2

如果您包含外部JS文件,則不能在腳本標記之間放置代碼。所以,你想:

<script type="text/javascript"> 
    var session_id = <?php print $_SESSION['id']; ?>; 
</script> 
<script type="text/javascript" src="test.js"></script> 

雖然你可以通過使會話ID隱藏的表單字段在你的HTML,然後使用test.js DOM方法找到它解決這個kludginess。

-1

另一種解決方案是讓PHP成爲一個這樣的腳本:

  • 有變量定義準備的JS文件,你需要:
var value1 = '{value1}'; 
var value2 = '{value2}'; 

... 
// script goes here 
  • 使用PHP,閱讀並用您的數據替換{value1}{value2}標籤:

if ($_GET["script"]) 
{ 
$data = array(
    "value1" => $_SESSION["id"], # i.e. 
    "value2" => $foo 
); 

$script = file_get_contents($script . ".js"); 

foreach ($data as $key => $value) 
{ 
    $script = str_replace("{" . $key . "}", $value, $script); 
} 

header("Content-Type: text/javascript"); 
echo $script; 
exit(); 
} 
  • 然後,你可以打電話給你的PHP「解析器」是這樣的:
<script type="text/javascript" src="?script=myscript"></script>