减慢ajax call / xhr请求的最佳方法

时间:2012-05-21 22:25:22

标签: javascript ajax

我不确定我的问题是否正确,但我的代码如下。基本上想要发出一个ajax请求,检查回调,然后重新执行ajax,直到得到所需的响应(在示例中,connectedvoter == 1)。

问题是它只需要80毫秒,并且xhr的数量在这个速度下真正快速地达到巨大数量。我试图找到一种“暂停”的方法,但我能想到的就是吃掉cpu。

有没有办法'减慢'发出的请求数量,比如说一两秒没有吃掉CPU?

var connctedvoter = 0;
var govoters = function () {
        $.ajaxSetup({
            async: false
        });
        var url = "getconnectedvoter.php";
        var data = {
            userid: userid
        };
        $.getJSON(url, data, callback);
    };
var pausevoters = function () {
        console.log("pausing ajax voters");
    };
var callback = function (response) {
        if (response.error) {
            return;
        }
        if (response.connectedvoter == 0) {
            setTimeout(govoters, 150);
            //govoters();
        } else {
            $('#vanid').html(response.vanid);
            $('#name').html(response.name);
            $("#mapurl").attr("src", response.mapurl);
            $('.call').fadeIn();
            return;
        }
    };
//DO THIS TO START
setTimeout(govoters, 150);
pausevoters();

2 个答案:

答案 0 :(得分:2)

只是增加超时的延迟:

if(!response.connectedvoter) {
  setTimeout(govoters, 2000); // instead of 150
}

而不是10秒的请求:

setTimeout(govoters, 150); // one request every 150 millisecond. 

请注意,首先您可以更改:

//DO THIS TO START
setTimeout(govoters, 150);

对此:

//DO THIS TO START
govoters();

此处并不需要暂停。

答案 1 :(得分:0)

只需使用以下代码更改行:

setTimeout(govoters, 150);

使用:

setTimeout(govoters, 1000); // 1 second