2012-03-14 12 views
10

Rozwijam czat php/javascript.Jak wykonać funkcję ajax onbeforeunload?

Gdy użytkownik się zaloguje, jego nazwa użytkownika zostanie wstawiona do tabeli MySQL o nazwie queue. Wkładka ta zwraca mysql_insert_id(), które będą przechowywane w zmiennej sesji o nazwie $_SESSION['CHAT_QUEUE_ID']

muszę MySQL wiersz tabeli mają zostać usunięte, gdy użytkownik zamknie stronę.

Próbowałem następujące, ale bez powodzenia:

js plik

window.onbeforeunload = closeSession; 
function closeSession(){ 
    $.ajax({ 
     url: "/chat/process/chat.php", 
     type: "GET" 
    }); 
    return "disconnected"; 
} 

chat.php

$delete= "DELETE FROM queue WHERE id = " . $_SESSION['CHAT_QUEUE_ID']; 
// query, etc 

Czy istnieje jakiś sposób, aby to zrobić?

+3

Czy zdajesz sobie sprawę, że wsparcie dla przeglądarki 'onbeforeunload'' jest ograniczona? Na przykład. opera tego nie obsługuje. – ckruse

+0

Nie pomyślałem o tym. jakieś sugestie? – matheusvmbruno

+2

Powszechną metodą jest zdefiniowanie limitu czasu. Jeśli użytkownik nie miał aktywności przez określony czas, jest odłączony. – ckruse

Odpowiedz

20

Wystrzeliwujesz asynchronię ajaxową (domyślnie dla jquery - ajax). Ale przeglądarka nie czeka na nic podczas rozładowywania.

spróbuj ustawić async : false w ustawieniach ajax-a. Ale nigdy nie możesz być pewien, że będzie to działało we wszystkich przeglądarkach za każdym razem.

patrz komentarz tutaj: http://api.jquery.com/unload/#dsq-comment-body-132164390

+0

Działa idealnie. powinienem pomyśleć o tym przed ... DZIĘKI! – matheusvmbruno

+0

jesteś mile widziany matheusvmbruno – StilgarBF

+2

także - jeśli powodują taką samą funkcjonalną wywołanie ajax, który służy asynchronicznie (lub liczbę wywołań Ajax) można ustawić je na ASYNC globalnie w wyciągu onbeforeunload: \t \t $ .ajaxSetup ({ \t \t async: false \t \t}); – JSP64

Powiązane problemy