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

Другие вопросы по тегам