2012-11-04 123 views
0

所以即時通訊試圖弄清楚這裏有什麼錯誤!用Jquery和Ajax處理PHP會話

即時通訊使用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(); 

} 

現在發生了什麼是我運行查詢,但該頁面還挺刷新會議收到的變種是actualy銷燬。如果我第二次點擊它,它按預期工作,會話已經被破壞。

任何人都可以解釋這一點?該過程與我的登錄相同,並且工作正常。

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

} 

回答

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,看看被送回。它會被放到您的頁面,預​​期的內容將去。

+0

OMG我不能相信我做到了! print_r($ _ SESSION)把它帶給我,我真的用管理會話而不是用戶會話。萬分感謝。 – MadeInDreams

+0

很多人認爲AJAX是服務器和瀏覽器之間的巫術,因爲有時候看不到服務器在做什麼。這樣簡單的技巧可以節省大量的時間和痛苦......很高興幫助 – charlietfl

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

    } 
+0

那麼,如果例如我將位置設置爲同一頁即時獲取頂部的整個頁面。但會話已被破壞,我可以再次看到登錄選項。所以它有點讓阿賈克斯無用的現在cuse即時通訊重新加載一個完整的頁面頂部,所以我必須做一個頁面,只適合在頂端只有我想要的?它接近像即時通訊請求一個請求!? – MadeInDreams

+0

這只是一個令人耳目一新的? – MadeInDreams

+0

如何檢查會話USER是否已設置? – gabrielem