Проблема с JQuery AJAX и Google Chrome - PullRequest
2 голосов
/ 27 апреля 2011

Я использую 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

спасибо, Sara

Ответы [ 2 ]

2 голосов
/ 27 апреля 2011

Если я правильно понимаю, ваша проблема, что запрос 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/)

1 голос
/ 27 апреля 2011

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

...