同步ajax请求未处理同步

时间:2015-10-21 09:47:59

标签: javascript jquery ajax

我有一个发送多个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'只准备请求,但它们被处理为异步。

我怎么想在这里思考?我想在发送所有请求后重新加载我的页面。

2 个答案:

答案 0 :(得分:5)

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

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

相反,所有请求都是异步的,并将所有的promises放在一个数组中,在完成所需的代码之前,可以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属性提供网址参数,则会自动为您编码。此外,由于输入的值在请求之间不会发生变化,因此您可以在循环之外抓取它们,以阻止在每次迭代中不必要地查询DOM。

答案 1 :(得分:1)

ajax的async参数,除了布尔值,请尝试这样:

async: false

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