2011-01-20 2 views
1

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

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

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

ответ

4

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

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

function doRequest() { 
    $.ajax({ 
     url: 'someurl', 
     /* some other options */ 
     complete: function(){ 
      setTimeout(doRequest, 30000); 
     } 
    }); 
} 
doRequest(); 
0

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

0

насчет Реентрантная функции? Что-то вроде:

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

     getMessages(); 
    }); 
} 
Смежные вопросы