Проблема с JQuery AJAX и Google Chrome

Я использую jQuery для отображения сообщения о подтверждении для пользователя при выходе со страницы следующим образом:

var changes = false;  

window.onunload =function() { 
    if (changes) {
        $.post("check.php",{undovideokey:VID});
    } else return null; 
};

с другой стороны

<input type='submit' name='Add' value='submit ' align='right' onclick="changes = true;" /> 

Проблема возникает при запуске кода в Google Chrome при обновлении страницы. Я видел много подобных проблем, но нет полезных ответов.

jQuery ajax вызов в обработчике onunload ПОСЛЕ ПОЛУЧЕНИЯ страницы при обновлении вручную. Как я могу гарантировать, что onunload произойдет первым?

window.onbeforeunload AJAX-запрос в Chrome

спасибо Сара

2 ответа

Если я правильно понимаю, ваша проблема в том, что запрос AJAX возникает после обновления страницы.

Изменение кода для запуска на onbeforeunload событие и использование синхронного AJAX-запроса должны решить вашу проблему:

var changes = false;

window.onbeforeunload = function() {
    if (changes) {
        $.ajax({
            async: false,
            url: "check.php",
            data: {
                undovideokey: 'foo'
            }
        });
    } else {
        return null;
    };
};

Обратите внимание, что это трудно увидеть в инструментах разработчика Chrome, поскольку он не сохраняет запросы AJAX при перезагрузках. Вы должны проверить поведение на стороне сервера или с помощью такого инструмента, как Fiddler

Рабочая демонстрация: http://jsfiddle.net/wq4hk/4/show (редактируется через http://jsfiddle.net/wq4hk/4/)

Я заметил, что браузеры будут пытаться в какой-то степени поддерживать состояние javascript, когда вы нажимаете кнопку "обновить" или нажимаете клавишу F5 (или как там на маке). Когда вы разрабатываете, это действительно раздражающая функция, потому что вы хотите начать с нового состояния. Это может показаться глупым, но что-то, что я делаю, чтобы заставить новое состояние, поместить курсор в поле адреса и нажать ввод. Затем Chrome обработает его, поскольку я начинаю новый сеанс и не удерживаю какое-либо затянувшееся состояние JavaScript. Я столкнулся с большим количеством странного поведения, когда просто нажимаю клавишу F5 для кода, который зависит от наличия чистого состояния и свежих событий.

Другие вопросы по тегам