使用内部的AJAX请求依次迭代.EACH循环

时间:2018-07-20 21:47:09

标签: javascript ajax asynchronous

我想遍历项目列表以将其保存在数据库中,但是必须按顺序保存它们,这意味着必须完成最后一个AJAX请求才能进入下一个循环。

  

据我所知,每个循环都是同步的,但AJAX请求不是同步的。我可以使用return true跳到下一个循环,也可以使用return false

中断循环
$('#ListOfItems').each(function () {
        $.ajax({

            type: "POST",
            url: "/Api/Workers/Save",
            data: JSON.stringify(ItemToSave),
            contentType: "application/json; charset=utf-8",
            crossDomain: true,
            dataType: "json",
            success: function (data, status, jqXHR) {
                //continue to the next loop
            },

            error: function (jqXHR, status) {
                //continue to the next loop
            }

        });
        //handle the loop until the Ajax request is done

});

那么,在收到AJAX请求的任何响应之前,如何处理循环?

2 个答案:

答案 0 :(得分:1)

Async:False将保留其余代码的执行。一旦获得ajax的响应,只有这样,其余代码才会执行​​。

OR

您可以使用$.ajax.then(doneCallback, failCallback )

答案 1 :(得分:1)

您需要添加 async 参数。可以将其设置为truefalse。 使代码保持同步的样子如下。

$('#ListOfItems').each(function () {
    $.ajax({
        type: "POST",
        url: "/Api/Workers/Save",
        data: JSON.stringify(ItemToSave),
        contentType: "application/json; charset=utf-8",
        crossDomain: true,
        dataType: "json",
        async: false
        success: function (data, status, jqXHR) {
            //continue to the next loop
        },
        error: function (jqXHR, status) {
            //continue to the next loop
        }
    });
});

如果您能读到post那就太好了。向下滚动到异步部分。

  

异步(默认值:true)   类型:布尔   默认情况下,所有请求都是异步发送的(即默认情况下设置为true)。如果需要同步请求,请将此选项设置为false。跨域请求和dataType:“ jsonp”请求不支持同步操作。请注意,同步请求可能会暂时锁定浏览器,从而在请求处于活动状态时禁用任何操作。从jQuery 1.8开始,不建议使用async:false和jqXHR($ .Deferred);您必须使用成功/错误/完成回调选项,而不要使用jqXHR对象的相应方法,例如jqXHR.done()。