Jquery асинхронные запросы - PullRequest
1 голос
/ 15 июня 2011

Я реализовал комет-клиент в jquery следующим образом:

$(document).ready(function () {
    comet();
});

function comet(){
    var cometJSON = {
            'comet': 'id'
        }
    $.ajax({
        type: "POST",
        url: "http://localhost:8080/comet",
        data: JSON.stringify(cometJSON),
        async: true, /* Set async request*/
        cache: false,
        timeout:50000, /* Timeout in ms */

        success: function(data){ 
            console.log('suc');
            eventReceived(data); 

        },
        error: function(jqXHR, textStatus, errorThrown){
            console.log("error: "+textStatus);

        },
        complete: function(jqXHR, textStatus){
            console.log("Send new comet!");
            comet();
        }
    });
};

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

Ответы [ 2 ]

4 голосов
/ 15 июня 2011

Спиннер указывает на текущее соединение, и это именно то, что происходит - после получения ответа в разделе complete вы мгновенно инициируете новый запрос, следовательно, в большинстве случаев происходит соединение (в значительной степени всегда). Чтобы избежать этого, нужно сделать задержку перед новым запросом - setTimeout(comet, 1000) звучит как хорошая альтернатива последнему comet();

1 голос
/ 15 июня 2011

Я реализовал то же самое некоторое время назад и столкнулся с той же проблемой:

https://github.com/tenorviol/cometjax

Чтобы решить проблему вечного прядильщика, установите время ожидания для вашего первоначального вызова ajax, например ::1006

$(document).ready(function () {
  setTimeout(function() {
    comet();
  }, 10);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...