だから私はここで何が悪いのかを理解しようとしています!
私は Ajax を使用してユーザーのログインとログアウトを行い、ドキュメントの一部を更新しています。すべて正常に動作していますが、ログアウトするときに、変更を確認するためにリンクを 2 回クリックする必要があります。
すべての指示が完了した後、セッションを破棄しているように見えます。
これがどのように機能するかです(またはほぼ!)
ドキュメント 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();
}
今何が起こったのかというと、クエリを実行しましたが、セッション変数が実際に破棄される前にページがちょっと更新されました。もう一度クリックすると、セッションが既に破棄されているため、期待どおりに機能します。
誰でもこれを説明できますか?プロセスは私のログインと同じであり、正常に機能しています。
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);
}