как обрабатывать запросы IE select onchange и ajax - PullRequest
1 голос
/ 10 октября 2009

Допустим, я прикрепляю обработчик события «изменение» javascript к элементу select, который отправляет ajax-запрос на загрузку некоторых вещей с сервера.

Это нормально в Firefox. Однако в IE событие change будет срабатывать каждый раз, когда вы быстро прокручиваете опции поля со списком с помощью колесика мыши. Это хлопотно, поскольку спамит сервер запросами, и нет никакой гарантии, что запросы возвращаются в правильном порядке, поэтому состояние на стороне клиента может стать несовместимым.

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

Теперь, хотя это, кажется, работает, это немного хакерски, и мне интересно, есть ли лучший подход. Есть ли другое событие, к которому мы можем подключиться, чтобы оно не срабатывало повторно при прокрутке с помощью мыши? Или мы должны просто отключить колесико мыши (onmousewheel = "return false;")? Firefox, похоже, не поддерживает колесико мыши через поля со списком, но я не уверен, является ли отключение колесика мыши серьезным юзабилити, нет-нет или что-то в этом роде.

Кто-нибудь может порекомендовать другие решения?

Ответы [ 3 ]

1 голос
/ 10 октября 2009

Я действительно не пробовал это (за исключением нескольких тестов для ответа на этот вопрос), но, возможно, вы могли бы заставить его работать, используя событие onblur. И, возможно, сохраните событие onchange, чтобы узнать, должен ли обработчик события onblur запускать запрос Ajax или нет.

1 голос
/ 13 октября 2009

Конечно, это немного глупо, но это лучшее решение, которое я нашел. Я использую этот шаблон для решения нескольких различных проблем, включая запросы к серверу, автоматическое сохранение пользовательских текстовых записей, автоматическое заполнение текстовых записей, проверку орфографии и т. Д. Это хороший способ определить паузу во взаимодействии с пользователем. Абстрагируйте логику функции «onPause», и она окажется менее хакерской: D

0 голосов
/ 10 октября 2009

вы должны отправлять текущее значение параметра в запросе ajax, теперь, если вы возвращаете это значение в ответе ajax, вы можете проверить, совпадает ли текущий выбранный параметр с возвращаемым ответом, а затем использовать его, если выбор между тем изменился, подождите для другого ответа!

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