所以我试图弄清楚这里有什么不对!
我使用Ajax来记录和退出用户并刷新文档的某些部分。一切正常,但是当我退出时,我必须单击我的链接两次才能看到更改。
看起来我在所有指令完成后都会破坏会话。
以下是它的工作原理(或差不多!)
文件html / php
<div id="top">
<?php
$top = new top();
$top->display();
?>
</div>
所以我只是调用一个类来创建文档顶部的内容,这样可以正常工作。
登录时在顶部你有登出选项和以下jquery / ajax调用
$("#unlog").live("click",function(){
req_content("top","user","logout","goodbye");
});
因此,当我点击退出时,我运行了req_content()函数,这一切都运行良好
现在,当我点击它时,运行我的有点ajax_query响应者
if($ajax_action=='logout'){
unset($_SESSION['user']);
session_destroy();
require('class.php');
$top=new top();
$top->display();
}
现在发生的事情是我运行查询但页面有点刷新,之后会话var被实际销毁。如果我第二次点击它,它会按预期工作,因为会话已被销毁。
任何人都可以解释这个吗?该过程与我的登录相同,并且工作正常。
req_content()函数
function req_content(box,user,action,query) {
var xhr = getXMLHttpRequest();
document.getElementById(box).innerHTML="<img src='img/load.gif' alt'Loading....'>";
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
document.getElementById(box).innerHTML=xhr.responseText;
}
};
var sVar1 = encodeURIComponent(box); /* Endroit ou on demande le contenu*/
var sVar2 = encodeURIComponent(user); /* Qui demande le contenu(facultatif)*/
var sVar3 = encodeURIComponent(action); /* Quel action veut-on effectuer*/
var sVar4 = encodeURIComponent(query); /* La requete pour efectuer l'action*/
xhr.open("GET", "ajax_http.php?box=" + sVar1 + "&user=" + sVar2 + "&action=" + sVar3 +"&query=" + sVar4, true);
xhr.send(null);
}
答案 0 :(得分:1)
尝试在此脚本中添加重定向:
if($ajax_action=='logout'){
unset($_SESSION['user']);
session_destroy();
/* HERE INSERT A REDIRECT like header("location: someurl");*/
require('class.php');
$top=new top();
$top->display();
}
答案 1 :(得分:1)
您的描述是您点击了链接。在AJAX完成之前,页面可能会令人耳目一新。
尝试:
$("#unlog").live("click", function() {
req_content("top", "user", "logout", "goodbye");
/* prevent browser default event on element such as link being followed, or form being submmitted*/
return false;
});
您也可以从php中返回正常内容,而不是发回正常内容:
print_r( $_SESSION);
作为对AJAX的回应,看看会发回什么。它将被放入您预期内容的页面中。