Я обнаружил, что это распространенная проблема, но, похоже, после поиска в Google нет очевидного решения.
На моей странице некоторые действия пользователя могут вызвать запрос AJAX. С YUI 2.X код выглядит так:
Connect.asyncRequest("POST", url,
{
'failure' : function() { alert('failed'); },
'success': function() { doSuccess(); },
'scope": this,
},
dataStr);
Когда AJAX-запрос не выполняется, я хотел бы открыть диалоговое окно (не обязательно оповещение), чтобы показать сбой. Однако, если запрос AJAX занимает несколько секунд, и я нажимаю кнопку «Обновить», чтобы перезагрузить страницу, диалоговое окно всегда появляется. Это не хорошо. Поэтому я хочу закрыть диалоговое окно при перезагрузке.
Когда страница перезагружается, обратный вызов «fail» будет вызываться с объектом {status: 0, statusText: «error communication»}. Это не отличается от другого типа сбоя подключения. Поэтому я не могу судить, является ли это фазой выгрузки на основе объекта обратного вызова.
В настоящее время мой обходной путь - прослушивание события "beforeunload".
Event.on(window, 'beforeunload', function() { isUnloading = true; });
Ошибка обратного вызова, проверять, показывать ли диалог на основе значения isUnloading.
Это работает, но событие beforeunload не является стандартным. Есть ли лучший способ справиться с таким делом?
Спасибо