2012-03-14 3 views
10

Я разрабатываю чат php/javascript.Как выполнить функцию ajax onbeforeunload?

Когда пользователь входит в систему, его имя пользователя вставляется в таблицу MySQL с именем queue. Эта вставка возвращает mysql_insert_id(), который будет храниться в переменном сеансе называется $_SESSION['CHAT_QUEUE_ID']

мне нужна строка таблицы MySQL будет удалена, когда пользователь закрывает страницу.

Я попытался следующие, но без успеха:

JS файл

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 

Есть ли способ сделать это?

+3

Вы знаете, что поддержка браузера для '' onbeforeunload'' ограничен? Например. Опера не поддерживает его. – ckruse

+0

Я не думал об этом. любое предложение? – matheusvmbruno

+2

Общим методом является определение тайм-аута. Если у пользователя не было активности в течение определенного времени, он отключается. – ckruse

ответ

20

Вы запускаете асинхронный асинхронный режим (по умолчанию для jquery - ajax). Но браузер не будет ждать чего-либо при разгрузке.

попробуйте установить async : false в настройках ajax. Но вы никогда не можете быть уверены, что это будет работать во всех браузерах каждый раз.

см комментарий здесь: http://api.jquery.com/unload/#dsq-comment-body-132164390

+0

Он отлично работает. должен был подумать об этом раньше ... СПАСИБО! – matheusvmbruno

+0

вы радушны matheusvmbruno – StilgarBF

+2

Кроме того - если вы запуская тот же функциональный вызов Ajax, который используется в асинхронном режиме (или количество вызовов AJAX), вы можете установить их ASync глобально в вашем onbeforeunload заявлении: \t \t $ .ajaxSetup ({ \t \t \t async: false \t \t}); – JSP64

Смежные вопросы