在AJAX请求期间无法识别PHP会话

时间:2012-10-21 03:16:17

标签: php jquery ajax session session-variables

我创建了一个导航栏,管理员可以使用简单的表单添加和删除链接。提交表单以添加链接时,会进行AJAX调用以将新信息添加到mySQL数据库中。作为回调函数的一部分,导航栏将更新为包含使用以下代码行的新链接:

$('.nav ul').load('/getnav.php');

文件getnav.php如下:

<?php
  require('/connect.php');
  $query = "SELECT id, title, url
            FROM nav
            ORDER BY position ASC";
  $result = $mysqli->query($query);

  while ($data = $result->fetch_assoc()) {
        if (!empty($_SESSION['valid']))
           echo '  <div class="container"><button type="button" name="'.$data['id'].'" class="delButton" alt="Delete"></button></div>
';
  echo '  <a href="'.$data['url'].'" alt="'.$data['title'].'">'.$data['title'].'</a>
';
}
?>

问题是当在AJAX调用中更新导航栏时,只显示链接,删除按钮消失。 $_SESSION['valid']已设置,因此代码应该在if之后执行。但是,如果在AJAX调用之后缺少代码,那就是这样。我对此的唯一解释是,当getnav.php被加载到.nav ul时,会话未被访问。谁知道为什么会这样?

3 个答案:

答案 0 :(得分:0)

如果没有完整的代码,很难诊断出来。

  • 您是否使用session_start()开始会话? ?

  • 你能试试var_dump $ _SESSION吗?

答案 1 :(得分:0)

我想我可以创建一个没有session_start()的getnav.php版本,并且会在html页面上调用require('/getnav.php');时使用。然后我创建另一个版本的getnav.php,它有session_start()并包含原始的,它将用于AJAX调用。

它应该解决问题,虽然它不是一个真正令人满意的解决方案。欢迎提出更好的建议!

答案 2 :(得分:0)

好吧,我明白了。

在第一个session_start()之后使用session_write_close();,我可以在getnav.php中再次使用session_start()而不会出现任何错误。