【问题标题】:PHP Session variable in external JS file is null外部 JS 文件中的 PHP 会话变量为空
【发布时间】:2016-02-02 12:03:28
【问题描述】:

我正在尝试将 PHP 会话变量放入外部 JS 文件。在 JS 文件中,我想读取和使用 session 变量的值,还要给 Session 变量分配一个新的值。

我试过这个:

php 文件:

<?php session_start();?>
<html>
<head>
    <title></title>
    <script src="testjs.php" type="text/javascript"></script>

</head>
<body>
<?php $_SESSION['Count'] = 1; ?>
</body>
</html>

javascript 文件:

<?php header("Content-type: application/javascript"); ?>

alert("I am an alert box!");
var test  = <?php echo $_SESSION['Count'] ?>;

alert(test);

<?php $_SESSION['Count'] = 2 ?>
test  = <?php echo $_SESSION['Count'] ?>;

alert(test);

但是我一直得到一个空值,我的 chrome 检查器一直给我这个错误: Uncaught SyntaxError: Unexpected token ;对于这一行: var test = ;

需要帮助:)

【问题讨论】:

  • 您在声明之前使用会话。在文件末尾包含您的 js 文件。
  • 不幸的是没有工作
  • $(document).ready(函数中编写你的js代码。

标签: javascript php session


【解决方案1】:

您需要在 js(php) 文件中启动会话:

<?php
session_start();
header("Content-type: application/javascript"); ?>

alert("I am an alert box!");
var test  = <?php echo $_SESSION['Count'] ?>;

alert(test);

<?php $_SESSION['Count'] = 2 ?>
test  = <?php echo $_SESSION['Count'] ?>;

alert(test);

这是因为浏览器对该文件提出了单独的请求,因为 script 标签与 php include 不同。

注意 像这样穿插 php 和 js 不是一个好主意。虽然上面的代码可以工作,但它会模糊服务器端 (php) 和客户端之间的心理界限,这可能会导致代码损坏,如下所示:

var abool = false;
var test  = <?php echo $_SESSION['Count'] ?>;

if(abool){
     <?php $_SESSION['Count'] = 2 ?>
}

var test  = <?php echo $_SESSION['Count'] ?>;

alert(test);

上面test will = 2,因为php代码在javascript之前执行,所以js if块对php的影响为零,本质上是:

<?php
echo $_SESSION['Count'];
$_SESSION['Count'] = 2;
echo $_SESSION['Count'];

【讨论】:

  • 当然哈哈在一个类似的文件中我已经尝试过相同的但我将 session_start 放在 header("Content-type: application/javascript");而不是高于这就是它不起作用的原因。谢谢史蒂夫!
  • 你能不能给出另一个建议,而不是穿插php和js,因为我需要改变会话变量
  • 当然可以,但是您需要提供更多详细信息——在什么情况下需要从 js 更新会话?当我用户执行某种操作时?
  • 实际上是这样的,我有一个 php 文件,用户可以在其中订购项目。1 通过在 textarea 中输入文本,其次他们可以从另一个网站订购它,这将返回给我 xml我在其中解析该数据并将其放入 html 字段的数据...因此用户可以创建可以来自多个来源的多个项目...但是将有 1 个 div 的输入字段包含像
  • 那么 javascript 如何适应这种情况呢?无论如何,您上面描述的所有内容似乎都将在服务器端使用 php 完成。您只需要检索 javascript 中的会话数据,还是真的需要从 javascript 更新它?
【解决方案2】:

查看您的 php 文件,您在此行末尾有一个流氓;

<?php $_SESSION['Count'] = 2 ?>;

输出只是:

;

移动分号就可以了:

<?php $_SESSION['Count'] = 2; ?>

编辑:看起来你没有在你的 JS 文件中打开会话......你没有使用 require()include() 所以我想你应该从 @987654328 开始@ 在发送标头之前。

【讨论】:

  • nope 仍然一无所获并且仍然为此获得未执行的令牌: var test = ;
  • 查看我的编辑...您可能需要使用session_start()开始会话
【解决方案3】:

你需要调用 session_start();在您访问 $_SESSION 变量之前。 &lt;script&gt; 标记中对“php”文件的引用向服务器发出另一个单独的请求。

http://php.net/manual/en/function.session-start.php

【讨论】:

    【解决方案4】:

    你不能在js文件中调用php代码... 当文件扩展名为 php 时,php 将起作用... 为此,您需要这样做: 在 php 文件中创建/分配 javascript 变量/对象并在 js 文件中访问它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-24
      • 1970-01-01
      • 2020-09-21
      • 2012-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多