Запретить новый запрос при получении предыдущего запроса в jQuery - PullRequest
3 голосов
/ 15 июля 2009

Я хочу узнать, как я могу предотвратить новый запрос ajax, пока браузер загружает предыдущий запрос! я создаю систему, содержащую таблицу данных, подобную этой:

col1 | col2 | col3 data1 | data2 | data3

когда пользователь наводит курсор мыши на поля данных, я использую Ajax для получения дополнительной информации о данных о событии мыши над событием, но если пользователь быстро перемещает курсор в столбце данных, создается несколько запросов. как мне это предотвратить?

Ответы [ 3 ]

2 голосов
/ 15 июля 2009

Я думаю, что вы можете кэшировать объект jjery ajax-запроса, а затем прервать его позже.

var xhr = $.ajax({...});

xhr.abort();
1 голос
/ 15 июля 2009

Бен Надель имеет отличный шаблон для обработки ошибок AJAX, который включает проверку нескольких запросов одного и того же типа.

Его пост в блоге может вам помочь.

0 голосов
/ 15 июля 2009

В вашем случае вам понадобится небольшая задержка между наведением мыши и запросом AJAX. Начните с задания setTimeout для запроса AJAX. Если во время этого тайм-аута произойдет очередное наведение мыши, сбросьте тайм-аут и установите новый тайм-аут.

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

var timeoutId = null; //Should be visible to both functions.
function cell_onmouseover()
{
    if (timeoutId)
    {
        clearTimeout(timeoutId);
        timeoutId = null;
    }
    timeoutId = setTimeout(callAJAX, 500); //half a second delay.
}

function callAJAX()
{
    //dostuff
}

[Редактировать]: Вы также можете улучшить это, чтобы прервать текущий вызов AJAX, когда пользователи наводят курсор на новый элемент.

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