0

对于我的程序,我必须发出 100 个 JSON 请求。不幸的是,每秒只允许 5 次调用。由于我使用 for 循环发出所有 JSON 请求(这是最好的方法),我必须在每 5 次调用后暂停循环 1 秒。

function Hello() {
   $("#randomdiv").show();
   for (var i=0; i<100; i++) {
       if (i%5 == 0 && i>0) {
         sleep(1000);
       }   
       $.getJSON(JSONreq, function(data) {Just a JSON request, nothing special}) 
    };  
};

sleep(1000)会导致整个页面冻结大约 20 秒,并防止在#randomdiv发出 JSON 请求之前出现。

我能做些什么来解决这个问题?非常感谢 :)

4

2 回答 2

0

您可以使用带闭包的超时:

function Hello() {
   $("#randomdiv").show();
   var loop = getLoop();
   loop();
};

function getLoop() {
    var count = 0;
    var func = function() {
        for (var i = 0; i < 5; ++i) {
            $.getJSON(JSONreq, function(data) {Just a JSON request, nothing special}) 
        }
        if (++count < 20) {
            setTimeout(func, 1000);
        }
    }
    return func;
}
于 2013-08-26T00:08:35.727 回答
-1

你可以这样做:

function Hello() {
    $("#randomdiv").show();
    for (var i = 0; i < 100; i++) {
        var interval = 0;
        if (i % 5 == 0 && i > 0) {
            interval = 1000;
        }
        setTimeout(function () {
            getJson()
        }, interval);
    };
}

function getJson() {
    $.getJSON(JSONreq, function (data) {
        Just a JSON request, nothing special
    });
}
于 2013-08-26T00:09:31.577 回答