for循环中的AJAX请求不按顺序返回结果

时间:2016-05-09 08:31:45

标签: jquery ajax for-loop

我尝试将10张图片附加到我的#container中,其顺序与他们要求的相同,但由于我不理解他们被退回的原因无序。

我目前通过for循环获取网址并将其传递到AJAX请求中,如下所示:

for (i = 0; i < $links.length; i++) {
    link = $links.eq(i).attr('href');

    // Appends anchor into #container
    $('#container').append('<a href="' + link + '" class="tile"><p>' + $links.eq(i).text() + '</p></a>');

    $.ajax({
        type: 'GET',
        url: link
    }).done(function (data) {
        var $data = $(data);
        $('#container').append($data.find('img').eq(0));
    });
};

任何有关我如何修复或更好的见解都会很棒!谢谢!

1 个答案:

答案 0 :(得分:4)

这是预期的行为,因为请求是异步的。它们可能按您需要的顺序触发,但响应时间完全取决于服务器以及处理每个请求所需的时间。

例如,假设您提出3个请求。 #1需要150ms完成,#2 200ms和#3 75ms。然后,您的done()处理程序将按顺序执行3,1,2。

如果您依赖于按特定顺序处理的响应,则需要修改代码以在单个请求中发送所有数据,以便可以根据需要格式化响应。

async: false的使用可能会产生您期望的行为,但使用它的做法非常糟糕,上述解决方案将更为可取。