Проблема с 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 для кода, который зависит от наличия чистого состояния и свежих событий.