同步ajax请求不同步处理
synchronous ajax requests not handled synchronous
我有一个循环,发送多个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
相关文章:
- Promise处理程序中的同步代码
- window.set同步处理异步调用的超时
- 如何在两个不同的选项卡(jQuery数据表)上同步处理可排序表
- 设置同步/异步函数序列的正确方法,所有这些函数都可以停止表单提交和进一步处理
- 如何将节点 js 的异步功能处理为在节点 js 中同步
- 有没有一种干净的方法来混合异步和同步数据库查询处理
- React JS同步处理array.map
- 在Javascript中,同步处理列表
- 处理同步XHR连接错误
- Clojuescrapt ajax.core没有单独的处理程序/回调,代码中的流非常精确,就好像代码是同步的一样
- 聚合铁ajax和异步请求(etag同步和响应处理)
- 在异步代码块中处理的多个ajax延迟调用的数组,后面是同步的最终代码块
- 处理多个上传的文件'同步地'
- 如何在node.js中使用promise或同步调用来处理if语句
- 为什么流行的JavaScript运行时不能处理看起来像同步的异步脚本?
- Node.js异步任务是同步处理的吗?
- 同步ajax请求不同步处理
- 需要进一步的帮助,使javascript同步生成器处理异步函数
- 在javascript中异步或同步调用事件处理程序
- 以角度同步处理循环