如何为外部javascript文件设置变量?

时间:2010-03-01 16:55:42

标签: php javascript variables

我试图找出如何将session_id变量设置为在外部js文件中使用。这就是我所拥有的。

php文件:

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

js file:

alert(session_id);

有了这个,我收到一条错误,说没有定义session_id。有没有办法传递这个信息?

我知道我可以用信息设置一个隐藏的输入,但我想有更好的方法。

5 个答案:

答案 0 :(得分:2)

嗯,嗯,怎么样:

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

答案 1 :(得分:2)

如果您包含外部JS文件,则无法在脚本标记之间放置代码。所以你想要:

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

虽然您可以通过在HTML中将会话ID设置为隐藏的表单字段然后在test.js中使用DOM方法来查找它来解决这个问题。

答案 2 :(得分: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

答案 3 :(得分:0)

<script>标记内的内容仅在找不到 的JavaScript文件时执行。在没有文件集之前,将变量设置在单独的<script>标记中:

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

答案 4 :(得分:-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>