同步ajax请求不同步处理

synchronous ajax requests not handled synchronous

本文关键字:同步 处理 请求 ajax      更新时间:2023-09-26

我有一个循环,发送多个ajax请求。

当所有这些都完成后,我想重新加载我的页面。

$.each(uuids, function (i, e) {
    console.log("Sending request for: " + e)
    $.ajax({
        type: 'GET',
        data: {
            _rnd: new Date().getTime()
        },
        url: addToGroupUrl + '?label=' + encodeURIComponent($("#changeGroupSelect").val()) + '&labelDisplay=' + encodeURIComponent($("#changeGroupSelect option:selected").text()) + '&uuid=' + e,
        dataType: 'json',
        async: 'false',
    });
});
location.reload()

现在我有问题,不是所有的请求。循环创建所有请求,但是一旦location.reload()完成,服务器就停止接收请求。

似乎async: 'false'只准备请求,但它们是异步处理的。

我该怎么想呢?当所有的请求都被发送后,我想重新加载我的页面

首先,async属性接受布尔值,而不是字符串,所以它应该是async: false

其次,更重要的是,永远不要使用async: false 。这对用户体验来说是可怕的,因为它完全阻止了UI的更新,使浏览器看起来像崩溃了。

相反,让所有的请求异步,并把所有的承诺放在一个数组中,你可以apply$.when,然后执行所需的代码,当他们都完成。试试这个:

var requests = [];
var label = $("#changeGroupSelect").val();
var labelDisplay = $("#changeGroupSelect option:selected").text();
$.each(uuids, function (i, e) {
    requests.push($.ajax({
        type: 'GET',
        data: {
            _rnd: new Date().getTime(),
            label: label,
            labelDisplay: labelDisplay,
            uuid: e
        },
        url: addToGroupUrl,
        dataType: 'json'
    }));
});
$.when.apply(this, requests).done(function() {
    window.location.reload()
});

请注意,如果您向data属性提供URL参数,它们将自动为您编码。此外,由于输入的值在请求之间不会改变,因此可以在循环之外获取它们,以防止在每次迭代中不必要地查询DOM。

ajax的async参数,除了一个布尔值,尝试如下:

async: false

http://api.jquery.com/jquery.ajax/jQuery-ajax-settings