Есть ли способ сделать запросы AJAX всегда в порядке? - PullRequest
2 голосов
/ 20 сентября 2010

В настоящее время я использую jQuery для выполнения ajax-запроса при каждом нажатии клавиши. Поэтому, если бы мой пользователь напечатал d-o-n-k-e-y, он отправил бы один запрос на каждое письмо. Однако, поскольку они выбирают разные пути к серверу в сети, если они слишком быстро набирают d-o-n-k-e-y, они не всегда приходят по порядку. Они могут прибыть как D-n-o-k-y-e и реагировать соответственно. Есть ли хороший способ убедиться, что все запросы отправляются по порядку?

Я не думаю, что ожидание подтверждения от запроса перед отправкой следующего будет работать, потому что это сильно замедлит передачу информации. У кого-нибудь есть идеи?

Спасибо.

Ответы [ 2 ]

7 голосов
/ 20 сентября 2010

From: http://api.jquery.com/jQuery.ajax/

async boolean
По умолчанию: true

По умолчанию все запросы отправляются асинхронно (т.е. это установленопо умолчанию true).Если вам нужны синхронные запросы, установите для этого параметра значение false.Междоменные запросы и dataType: запросы «jsonp» не поддерживают синхронную работу.Обратите внимание, что синхронные запросы могут временно блокировать браузер, отключая любые действия, когда запрос активен.

Кроме того, может быть не самой лучшей идеей отправлять ajax-запрос при каждом нажатии клавиши.Разве вы не можете использовать тайм-аут и отправить запрос don и key (буферизованный, например, каждые 300 мс)?

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

Вот несколько идей -

  • Отмените ваши старые запросы по мере поступления новых. Это позволит минимально снизить нагрузку на сервер и достичь того, что вы просите.

  • Вместо того, чтобы заставлять сервер отслеживать, когда поступили запросы, потребуется лишь небольшой вспомогательный объект, чтобы отслеживать, какой запрос является последним. var mostRecentRequest = XHR ({success: function () {if (this === mostRecentRequest) {...}}});

  • Как упомянуто выше, звонить на сервер можно только тогда, когда пользователь на мгновение перестает печатать. Выполните setTimeout () для keyup, который срабатывает ~ 500 мс позже и отправляет запрос, и отменяйте и сбрасывайте этот тайм-аут при каждом нажатии новой клавиши.

НЕ выполнять синхронные XHR-запросы в браузере. Когда-либо. При любых обстоятельствах. Весь браузер будет зависать до тех пор, пока запрос не будет завершен, что может занять пару секунд.

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