Как сделать так, чтобы Connect не перезванивал при перезагрузке страницы в YUI? - PullRequest
3 голосов
/ 15 сентября 2010

Я обнаружил, что это распространенная проблема, но, похоже, после поиска в 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 Ответ

0 голосов
/ 15 сентября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...