В настоящее время я изучаю малоизвестный иностранный язык, поэтому я сделал простой сайт (http://ianburris.com/armenian/), так что я мог легко найти слова из книги, используемой в моем классе. Одна вещь, которую я заметил, это то, что иногда, если я ввожу что-то вроде «дом», запрос слов, соответствующих «h», завершается после запроса «ho», и поэтому результаты для «h» перезаписывают результаты для «ho». ". Это особенно заметно, если вы набираете слово, а затем очень быстро нажимаете клавишу Backspace. После того, как вы очистите все символы, мое сообщение «Введите английское слово» появится на секунду, а затем последний запрос AJAX, наконец, завершит перезапись сообщения. Есть ли способ по существу отменить вызовы AJAX или мне следует включить временную метку, которую я могу использовать для удаления устаревших результатов?
Предотвращение условий гонки с помощью вызовов jQuery AJAX
Ответы (1)
Поддерживайте переменную для определения номера заказа выполняемого вызова ajax, например. 1 для первого вызова, 2 для второго вызова, 3 для вызова ajax для 3-й буквы. И всякий раз, когда запрос ajax завершен, проверьте текущую длину строки значения вашего поля ввода. Если они совпадают, данные действительны, запишите их на своей странице, иначе отклоните их.
пример: запрос ajax со значением 3 завершен, текущее значение в поле ввода = "hou" , поскольку hou.length == 3 , это правильное совпадение, и данные можно обрабатывать.
person
DhruvPathak
schedule
13.02.2011
С таким же успехом можно хранить массив значений в процессе (если необходимо выполнить расширенный мониторинг) и/или само последнее значение — это действительно легко сделать, если захватить в закрытии обратного вызова XHR. Просто длина иногда может привести к ложным срабатываниям: хоу и мало.
- person ; 14.02.2011