在循环结束之前执行的循环内的AJAX调用

Bel*_*gor 0 javascript ajax jquery

我有以下问题:

我有一个循环:

// Code A
. . .
for (var key in dict){
    // Code B
    . . . 
    var list = this.initializeList();
    var selfRef = this;

    jQuery.ajax({
        dataType: 'json',
        url: '/someUrl',
        data: {'sent_data': sendData},
        success: function (recievedData){
            this.function(list);
        }
    });

    // Code C
    . . . 
}
// Code D
. . .
Run Code Online (Sandbox Code Playgroud)

现在,理想的方法是,如果代码的执行顺序是:

  1. 代码A.
  2. for循环:
    • 代码B.
    • AJAX
    • 代码C.
  3. 代码D.

但是,问题是,在步骤2中的循环:第一,代码B被执行,并且下一个- AJAX调用,然后再次代替AJAX代码代码C.在下一次迭代中,AJAX代码再次执行而不是代码B.对我来说,执行顺序与上面的列表中显示的一样非常重要.正如您所看到的,应该为每个循环重新初始化变量列表,但是,我们只有第一次初始化时才会进行多次AJAX调用.

我该如何解决?

dSq*_*red 5

你需要使$ .ajax()同步(而不是默认的异步),如下所示:

$.ajax({
    ...
    async: false
}); 
Run Code Online (Sandbox Code Playgroud)

这将导致脚本的执行等到$ .ajax结束,然后继续执行脚本的其余部分.

我希望这有帮助!