0

所以我想弄清楚这里出了什么问题!

我使用 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();

 }

现在发生的事情是我运行了查询,但是在会话变量实际上被破坏之前页面有点刷新。如果我再次单击它,它会按预期工作,因为会话已经被破坏。

任何人都可以解释这个吗?该过程与我的登录相同,并且工作正常。

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);

}
4

2 回答 2

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();

     }
于 2012-11-04T23:53:18.990 回答
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 的响应,看看会发回什么。它将被放入预期内容所在的页面中。

于 2012-11-05T00:02:13.377 回答