Предотвращение условий гонки с помощью вызовов jQuery AJAX

В настоящее время я изучаю малоизвестный иностранный язык, поэтому я сделал простой сайт (http://ianburris.com/armenian/), так что я мог легко найти слова из книги, используемой в моем классе. Одна вещь, которую я заметил, это то, что иногда, если я ввожу что-то вроде «дом», запрос слов, соответствующих «h», завершается после запроса «ho», и поэтому результаты для «h» перезаписывают результаты для «ho». ". Это особенно заметно, если вы набираете слово, а затем очень быстро нажимаете клавишу Backspace. После того, как вы очистите все символы, мое сообщение «Введите английское слово» появится на секунду, а затем последний запрос AJAX, наконец, завершит перезапись сообщения. Есть ли способ по существу отменить вызовы AJAX или мне следует включить временную метку, которую я могу использовать для удаления устаревших результатов?


person Ian Burris    schedule 13.02.2011    source источник


Ответы (1)


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

пример: запрос ajax со значением 3 завершен, текущее значение в поле ввода = "hou" , поскольку hou.length == 3 , это правильное совпадение, и данные можно обрабатывать.

person DhruvPathak    schedule 13.02.2011
comment
С таким же успехом можно хранить массив значений в процессе (если необходимо выполнить расширенный мониторинг) и/или само последнее значение — это действительно легко сделать, если захватить в закрытии обратного вызова XHR. Просто длина иногда может привести к ложным срабатываниям: хоу и мало. - person ; 14.02.2011