顺序执行js

时间:2015-02-06 11:31:28

标签: javascript ajax sequential

我正在开发一个需要以顺序方式处理ajax调用的项目。我的代码是这样的:

for(var j=0; j<3;j++) {
                $.ajax({
                    url:url[j],
                    async:false
                }).done(function(result){
                    var data = result.data;
                    for(var i=0; i < data.length;i++){
                        analyses += "<div><div id=\"" + data[i] + "\" class=\"module\">";
                        analyses += "<br/>Analysis : " + data[i] + "<br/>";
                        analyses += "</div></div>";
                        $("#analysesPlaceHolder").html(analyses);
                    }
                });

            }

然而,现在它只是从列表中随机选择url(有时它是第一个,有时它不是)。如何使执行顺序执行,以便代码首先执行第一个ajax调用,然后执行第二个等等。

1 个答案:

答案 0 :(得分:0)

我不建议在循环中使用ajax调用。

这是一种更好的方法,它会增加ajax回调中的计数,然后触发下一个ajax请求:

var urlCount = 0;

var makeAjaxCall = function(count) {
    $.ajax({
        url:url[count],
    }).done(function(result){
        var data = result.data;
        for(var i=0; i < data.length;i++){
            analyses += "<div><div id=\"" + data[i] + "\" class=\"module\">";
            analyses += "<br/>Analysis : " + data[i] + "<br/>";
            analyses += "</div></div>";
            $("#analysesPlaceHolder").html(analyses);
        }

        urlCount++;
        if (urlCount < 3) {
            makeAjaxCall(urlCount);
        }
    });
}

makeAjaxCall(urlCount);

您也可以使用promises链接ajax调用,如上面的评论中所述。