我创建了一个导航栏,管理员可以使用简单的表单添加和删除链接。提交表单以添加链接时,会进行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
时,会话未被访问。谁知道为什么会这样?
答案 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()而不会出现任何错误。