一系列async ajax调用一系列异步ajax调用。如何知道所有通话何时结束?

时间:2016-09-01 22:43:14

标签: javascript jquery ajax xmlhttprequest

所以我有一个' for'在每次迭代中调用一个不同的ajax调用,在每个调用的回调中,我收集一些url并为每个url运行ajax调用。

它看起来像这样

for(var i=1; i<num_pages + 1; i++)
{

    var page_url = main_url + "&sf=" + i;

    console.log('=== doing page: ' + page_url);

    try
    {
        $.ajax({url: page_url, async:false, success: function(data) 
        { 
            var urls = [];

            $('a', data).each(function()
            {
                if($(this).attr('itemprop') == 'url')
                {
                    var u = $(this).attr('href');
                    if(urls.indexOf(u) == -1)
                    {
                        urls.push(u);
                    }
                }
            });

            // for(var j=0; j<urls.length; j++)
            for(var j=0; j<3; j++)
            {
                doSetTimeout(j, i);
            }
        }

        });
    }
    catch(err)
    {

    }
}

function doSetTimeout(i, page_num) 
{
  setTimeout(function() 
  { 
    get_info(urls[i], page_num);
  }, 100);
}

doSetTimeout()用于在调用get_info()之间延迟100ms,get info是一个包含异步ajax调用的函数。

我执行异步尝试不要使请求超载服务器,因为我试图找到一个订单,所以我可以知道它何时完成,但它不起作用。

因为它是异步jquery的ajaxStop在每个ajax完成后触发。

不确定如何使用promises做到这一点。

非常感谢帮助。

编辑:这里是get_info的样子:

function get_info(url, page_num)
{
    $.ajax({ url: url, async: false, success: function(data) 
        { 
            // this is optional, sometimes it's true sometimes it's false
            if(views_enabled)
            {
                $.ajax({type:'POST', async:false, url:'/someurl/', data:{price: price}, success: function()
                {
                    item['views'] = data.views;
                    all_data.push(item);
                    console.log('finished item');
                }
                }); 
            }
            else
            {

                console.log('finished item');
            }
        } 
    });
}

0 个答案:

没有答案