Javascript AJAX двойной запрос - PullRequest
1 голос
/ 21 января 2011

У меня есть приложение чата AJAX jQuery, оно работает, запрашивая новые сообщения, при запуске оно просто запрашивает 20 самых последних сообщений, затем получает счетчик самого последнего сообщения, поэтому, когда оно спрашивает снова, оно знает, что последний идентификатор сообщения был, и сервер возвращает сообщение с тех пор.

Проблема связана с более медленными соединениями, она занимает больше времени, чем запрашиваемая частота, что приводит к получению более одного и того же сообщения, поскольку выполняется более одного запроса с тем же идентификатором старого сообщения.

Как я могу убедиться, что выполняется только один запрос за раз?

Ответы [ 3 ]

4 голосов
/ 21 января 2011

Я предполагаю, что вы используете setInterval для выполнения ваших повторных запросов. Это не лучшая практика, по той причине, которую вы упомянули: если функция занимает много времени, новая может иметь место до завершения предыдущей итерации.

Лучше всего использовать setTimeout в обработчике complete вашего post вызова:

function doRequest() {
    $.ajax({
        url: 'someurl',
        /* some other options */
        complete: function(){
            setTimeout(doRequest, 30000);
        }
    });
}
doRequest();
0 голосов
/ 21 января 2011

А как насчет входной функции? Что-то вроде:

function getMessages(){
   $.get('url', function(data){
      //process the data

      getMessages();
   });
}
0 голосов
/ 21 января 2011

Используйте setTimeout в обработчике событий onreadystatechange (success и error в терминах jQuery IIRC) для запуска следующего запроса.Не используйте setInterval и отправляйте их по таймеру независимо.

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