Функции Javascript не выполняются должным образом для нетерпеливых пользователей - PullRequest
2 голосов
/ 15 сентября 2011

Прежде всего, я прошу прощения за то, что был настолько общим в моем вопросе ... Я не знаю, как спросить об этом в деталях без загрузки тонны кода ..

ПРОБЛЕМА:

Мы делаем ленивую загрузку JavaScript.

НОРМАЛЬНОЕ ИСПОЛЬЗОВАНИЕ:

  1. Пользователь заходит на сайт.
  2. Пользователь нажимает на кнопку.
  3. Кнопка вызывает сервер, чтобы вызвать слой, который содержит больше JavaScript (файл JavaScript + некоторый встроенный код JavaScript)
  4. вызывается обратный вызов, чтобы JavaScript помещался в DOM и выполнялся.Откроется всплывающий слой с содержимым.

Случай использования выше: нетерпеливый злой пользователь grrrr

  1. Пользователь заходит на сайт.
  2. Пользователь нажимает кнопку несколько раз.
    • JavaScript при начальной загрузке не полностью завершил обработку ...
    • некоторые функции генерируют ошибки ...
      • null is null
      • функция не определена
      • XYZ равно нулю
      • Невозможно вызвать метод 'get' из нуля (YUI 3.3 использует get)
  3. разрывы страниц илиошибки генерируются и отправляются на сервер.

Пример использования выше: полу нетерпеливый пользователь

  1. Пользователь заходит на сайт.
  2. JavaScript при начальной загрузкеполностью обработан
  3. Пользователь нажимает кнопку снова и снова.
  4. Кнопка вызывает сервер, чтобы вызвать слой, который содержит больше JavaScript (файл JavaScript + некоторый встроенный код JavaScript)
  5. обратный вызов вызывается так, что JavaScript помещается в DOM и выполняется.
    • JavaScript по какой-то причине загружается и прерывается во время выполнения ..
    • некоторые функции генерируют ошибки ...
      • null is null
      • функция не определена
      • XYZ имеет значение null
      • Невозможно вызвать метод 'get' из null (использование get для YUI 3.3)
  6. разрывы страниц илиошибки генерируются и отправляются на сервер.

, поэтому возникает вопрос, как я могу остановить взлом сайта для нетерпеливого пользователя ... Я избегаю попытки / ловит, но я должен?

Я использую YUI 3.3, с плагином диспетчера, если это помогает

1 Ответ

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

Обработайте щелчок только один раз, вы можете пометить кнопку таким образом, чтобы последующий вызов обработчика щелчка мог определить, что загрузка уже началась, и / или отследить объект XMLHttpRequest, который запустилзапросить и вызвать abort, а затем запустить новый запрос.

Чтобы ограничить обработку кликов, существует ряд решений.Не зная форму вашего javascript, я бы оценил самый простой в реализации метод, использующий хранилище элементов:

function clickHandler(element) {
 // make sure this is not already loading
 if (element.retrieve('_waiting_to_load') === true)
   return;
 element.store('_waiting_to_load', true);

 /* do ajax calls */
}

function ajaxCallback(response) {

  /* do whatever needs to be done with the response */

  // set _waiting_to_load to false
  element.store('_waiting_to_load', false);
}

Чтобы прервать / перезапустить загрузку:

function clickHandler(element) {

 // if the loading is pending, start it over
 if (element.retrieve('_pending_query')) {
   element.retrieve('_pending_query').abort();
 }

 // don't know what you're using for this... substitute the real thing
 var query = new ajaxQueryObject;
 element.store('_pending_query', query );

}

function ajaxCallback(response) {

  /* do whatever needs to be done with the response */

  element.store('_pending_query', false);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...