2012-10-21 29 views
0

我创建了一个导航栏,管理员可以使用简单的表单添加和删除链接。当提交表单以添加链接时,会进行AJAX调用以将新信息添加到mySQL数据库中。作为回调函数的一部分,导航栏更新使用下面的代码行,以包括新的链接:在AJAX请求期间PHP会话无法识别

$('.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时,会话没有被访问。任何人都知道这是为什么?

+0

您是否在getnav.php的任何地方开始会话?我看到你试图访问会话变量,但直到会话开始,你不能 – clementine

+0

哦,这可能是。我在html中使用'require('getnav.php')',并且已经在该页面上启动了一个会话,所以我必须在getnav.php中删除它。我必须以某种方式来解决这个问题。 – fvgs

+0

所以我必须在html页面上有'session_start()',我必须在页面上有'require('/ getnav.php')',而getnav.php也必须有'session_start()'。有关如何在不破坏会话的情况下完成此任务的想法,显然不需要在同一页面上调用session_start()两次? – fvgs

回答

0

这是很难诊断没有完整的代码。

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

  • 你可以尝试var_dump $ _SESSION吗?

0

我想我可以创建一个版本getnav.php的不具有session_start(),将被用于当我打电话require('/getnav.php'); HTML页面上。然后,我创建了另一个版本的getnav.php,它具有session_start()并包含原始内容,该内容将用于AJAX调用。

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

0

好吧,我想通了。

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