Jquery异步请求

时间:2011-06-14 21:05:25

标签: javascript jquery ajax

我在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 个答案:

答案 0 :(得分:4)

微调器指示正在进行的连接,这正是发生的事情 - 在收到答案后,在complete部分中您立即触发新请求,因此大多数时间都在进行连接(几乎总是)。为了避免这种情况,您需要在新请求之前做一个延迟 - setTimeout(comet, 1000)听起来像是上一个comet();

的一个很好的替代方案

答案 1 :(得分:1)

我前段时间实现了同样的事情并遇到了同样的问题:

https://github.com/tenorviol/cometjax

要解决永远微调器的问题,请在初始ajax调用上设置超时,例如:

$(document).ready(function () {
  setTimeout(function() {
    comet();
  }, 10);
});