2016-11-16 3 views
0

Когда я ввожу текст в свой виджет текстового поля, я отправляю запрос с каждым символом, введенным в него, чтобы получить соответствующие данные с сервера.Можно ли отменить асинхронный вызов независимо от его текущего состояния?

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

Можно ли отменить запрос AJAX независимо от его текущего состояния? Если да, как это сделать?

+0

Что вы имеете в виду, «независимо от его текущего состояния»? Нет, вы не можете отменить запрос, который уже преуспел. – Bergi

+0

Почему вы контролируете замораживание? Слишком много запросов? Синхронные запросы? В любом случае, дросселирование запросов («ожидание») является единственным решением, отмена не поможет вам здесь. – Bergi

ответ

0

MDN says :

Метод XMLHttpRequest.abort() прервет запрос, если он уже было отправлено. Когда запрос прерывается, его readyState устанавливается в 0 (UNSENT), но событие readystatechange не запускается.

Что важно отметить, что в то время как вы будете в состоянии .abort() запросов на стороне клиента (и, таким образом, не придется беспокоиться о реакции сервера), вы все еще кишат сервер, потому что все эти запросы еще послан.

Мое мнение таково, что вы были правы в первый раз, за ​​счет реализации механизма, который ограничивает частоту AJAX запросов. Вы упомянули, что у вас возникла проблема с этим замораживанием вашего контроля (я полагаю, вы имеете в виду, что браузер либо занимает больше времени, чтобы реагировать на действия пользователя, либо перестает отвечать полностью), и это может быть признаком того, что существует проблема с тем, ваше приложение обрабатывает асинхронный код.

Убедитесь, что вы правильно используете асинхронные API, такие как Promise, избегайте циклов, которые выполняют тяжелую обработку или просто ждут в клиентском коде, и делают вашу обработку событий (т. Е. Обратную связь AJAX) простой и быстрой, чтобы уменьшить влияние на пользователя ,

Смежные вопросы