如何在一组ajax调用之间给出超时?

时间:2012-04-15 07:57:35

标签: ajax settimeout intervals rotten-tomatoes

我的烂番茄API限制为10次/秒。我需要总共打50个电话。

如果我把它们全部组合在一起,很多电话都会被拒绝。

因此我需要在每10次通话后给出1秒的超时时间。

我该如何实现?这是我的代码:

$.get("t250.txt", function (data) {
    var elem = data.split("\n");
    $.each(elem, function(index, item) {
        var $placeholder = $('<div>').appendTo("div.content");

        setTimeout(function() {
            $.ajax({
                type: 'post',
                url: moviesSearchUrl + '&q=' + encodeURI(item) + '&page_limit=1',
                dataType: "jsonp",
                async: false,
                success: searchCallback
            });
        }, 1000);

        function searchCallback(data){});
    }
}

问题仍然存在。此外,页面等待1秒钟加载,然后完全加载所有内容。我在每个循环中都给了setTimeout函数。似乎没有效果。我做错了什么?

1 个答案:

答案 0 :(得分:1)

删除async: false中的$.ajax()

修改 试试这个:

var elem;
var timeoutId;
function getURLs(){
    $.get("t250.txt", function (data) {
        elem = data.split("\n");
    });

    timeoutId = setTimeout("sendRequest()", 1000);    
}

var idx = 0;
function sendRequest(){
    if (idx > elem.length-1){
        clearTimeout(timeoutId);
        return;
    }
    var item = elem[idx];
    $.ajax({
        type: 'post',
        url: moviesSearchUrl + '&q=' + encodeURI(item) + '&page_limit=1',
        dataType: "jsonp",
        success: searchCallback
        });
    idx++;   
}

function searchCallback(data) {
//Callback logic
}