Как сделать, чтобы Connect не перезванивал при перезагрузке страницы в YUI?

Я обнаружил, что это распространенная проблема, но кажется, что после поиска в Google нет очевидного решения.

На моей странице какое-то действие пользователя вызовет запрос AJAX. В YUI 2.X код выглядит следующим образом:

Connect.asyncRequest("POST", url, 
   {
      'failure' : function() { alert('failed'); },
      'success': function() { doSuccess(); },
      'scope": this,
   },
   dataStr);

Когда запрос AJAX терпит неудачу, я хотел бы открыть диалоговое окно (не обязательно предупреждение), чтобы показать сбой. Однако, если запрос AJAX занимает несколько секунд, и я нажимаю кнопку «Обновить», чтобы перезагрузить страницу, всегда появляется диалоговое окно. Это не хорошо. Поэтому я хочу подавить диалог при перезагрузке.

Когда страница перезагружается, обратный вызов «сбой» будет вызван с объектом {status: 0, statusText: 'сбой связи'}. Это не отличается от других видов сбоев соединения. Таким образом, я не могу судить, является ли это фазой выгрузки на основе объекта обратного вызова.

В настоящее время мой обходной путь заключается в прослушивании события «перед выгрузкой».

Event.on(window, 'beforeunload', function() { isUnloading = true; });

Обратный вызов ошибки проверяет, показывать ли диалоговое окно на основе значения isUnloading.

Это работает, но событие «перед выгрузкой» не является стандартным. Есть ли лучший способ справиться с таким случаем?

Спасибо


person Morgan Cheng    schedule 15.09.2010    source источник
comment
Вы не можете использовать unload вместо beforeunload? По крайней мере, это было бы стандартным событием.   -  person casablanca    schedule 15.09.2010
comment
Я старался. Но обратный вызов Connect вызывается до срабатывания обработчика события выгрузки.   -  person Morgan Cheng    schedule 15.09.2010


Ответы (1)


Судя по YUI 2 API, вы должны способен:

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), но вы можете попробовать.

person RMorrisey    schedule 15.09.2010