2009-05-29 4 views
1

Я использую XMLHttpRequest в форме регистрации, чтобы узнать, было ли уже введено имя пользователя. Сценарий работает нормально, но я замечаю, что при выполнении запроса есть некоторая временная задержка - веб-страница замерзает на секунду после отправки запроса.Как уменьшить задержку XMLHttpRequest?

Есть ли способ получить запрос «в фоновом режиме» и не вызвать какого-либо отставания на лицевой стороне? Мне нравится реализация Twitter: он показывает значок со стрелкой в ​​песочнице, когда он ищет базу данных. Как мне получить что-то подобное?

ответ

7

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

Если память вам просто нужно сделать

xhr.onreadystatechange = function() { 
    if (xhr.readyState === 4 && xhr.status === 200) loadFinished(); 
} 
xhr.open(requestType, url, true); 

Где true делает запрос асинхронным.

+0

Спасибо! Это прекрасно работает. – Yongho

1

Необходимо указать, что XMLHttpRequest работает асинхронно - в фоновом режиме. Затем вы можете предоставить функцию обратного вызова, чтобы пользователи могли продолжить просмотр до завершения операции.

Многие сайты просто показывают анимированный GIF, ожидая возвращения операции, что, вероятно, дает пользователю впечатление, которое вы ищете, поскольку похоже, что что-то происходит. Вы можете проектировать и загружать один из этих AJAX-прядильных индикаторов легко на http://www.ajaxload.info/.

+0

Errr нет, по умолчанию XHR * * синхронно * он блокируется в ожидании нагрузки. – olliej

+0

Справа - я просто исправил это, пока вы комментировали. Благодарю. – Ryan

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