0

我创建了一个导航栏,管理员可以在其中使用简单的表单添加和删除链接。当提交表单以添加链接时,会进行 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 调用之后缺少的是 if 的代码。我对此的唯一解释是当 getnav.php 被加载到.nav ul时,会话没有被访问。有谁知道这是为什么?

4

3 回答 3

0

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

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

  • 你可以尝试 var_dump $_SESSION 吗?

于 2012-10-21T03:20:18.437 回答
0

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

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

于 2012-10-21T03:36:20.993 回答
0

好吧,我想通了。

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

于 2012-10-21T03:50:04.410 回答