Как выполнить ajax-функцию на preforeunload? - PullRequest
10 голосов
/ 14 марта 2012

Я разрабатываю чат php / javascript.

Когда пользователь входит в систему, его / ее имя пользователя вставляется в таблицу 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

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

1 Ответ

19 голосов
/ 14 марта 2012

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

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

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

...