Как сделать так, чтобы Connect не перезванивал при перезагрузке страницы в YUI?
Я нашел это распространенной проблемой, но кажется, что после поиска в 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 не является стандартным. Есть ли лучший способ справиться с таким делом?
Спасибо
1 ответ
С точки зрения API YUI 2, похоже, вы сможете:
var connection = Connect.asyncRequest("POST", url,
{
'failure' : function() { alert('failed'); },
'success': function() { doSuccess(); },
'scope": this,
},
dataStr);
Event.on(window, 'beforeunload', function() { Connect.abort(connection, function() {...}, false ); });
Я не очень много использовал YUI (я в основном использую jquery), но вы можете попробовать.