Ajax 请求循环并等待完成
Ajax Request Loop and Wait Until Complete
有没有更有效的方法来编写以下内容?我需要遍历objList并将UnqKey传递给wfrmPrint。成功后,我必须遍历页面。我通过传递一个整数并检查它是否小于长度来循环浏览页面和 unqkeys。 我尝试使用取自 http://www.tentonaxe.com/index.cfm/2011/9/22/Using-jQuerywhen-with-a-dynamic-number-of-objects 的 .when.apply,但它正在加载 unqkeys,然后加载页面。
//sample objList
[
{
"UnqKey": 1,
"Pages": [
"wfrmSet1Page1.aspx",
"wfrmSet1Page2.aspx"
]
},
{
"UnqKey": 2,
"Pages": [
"wfrmSet2Page1.aspx",
"wfrmSet2Page2.aspx",
"wfrmSet3Page2.aspx",
"wfrmSet4Page2.aspx"
]
}
]
function Loop(iListIndex) {
var obj = objList[iListIndex];
if (iListIndex < objList.length) {
jQuery.ajax({
type: "GET",
url: 'wfrmPRINT.aspx?action=LoadSession&UnqKey=' + obj.UnqKey, //load session that is used in wfrmSet1Pages.. or wfrmSet2Pages..
success: function () {
AddPages(obj, iListIndex, 0);
}
})
} else {
alert('Done');
}
}
function AddPages(obj, iListIndex, iPageIndex) {
if (iPageIndex < obj.Pages.length) {
jQuery.ajax({
type: "GET",
url: obj.Pages[iPageIndex] + '?Print=1', //load html
async: true,
success: function (html) {
iPageIndex++
AddPages(obj, iListIndex, iPageIndex);
},
error: function () {
alert('Failed!');
iPageIndex++
AddPages(obj, iListIndex, iPageIndex);
}
});
} else {
iListIndex++
Loop(iListIndex);
}
}
你也许可以做这样的事情,
function getData(arr,arrindex) {
$.ajax({
type: "GET",
url: 'wfrmPRINT.aspx?action=LoadSession&UnqKey=' + arr[arrindex].UnqKey
}).then(function(data){
var deferredObj = $.Deferred(), defArr = $.map(arr[arrindex].Pages,function(page){
return $.ajax({type: "GET", url: page + '?Print=1'});
});
$.when.apply(null,defArr).done(deferredObj.resolveWith).fail(deferredObj.resolveWith);
return deferredObj.promise();
}).done(function(){
arrindex++;
if (arr[arrindex]) {
getData(arr,arrindex);
}
else {
alert("done!");
}
}).fail(function(){
alert("FAIL!");
});
}
getData(objList,0);
它按顺序获取每个 wfrm,当每个 wfrm 完成时,一次请求该页面的所有页面。您的循环和延迟 $.when 之间的某种组合
编辑:固定$.map
参数顺序
相关文章:
- 在等待ajax请求时显示微调器并禁用页面
- Javascript在for循环中等待处理请求
- 如何使请求等待上一个请求完成
- 如何解决等待多个请求以javascript发送响应的问题
- 如何等待异步请求完成
- 节点.js等待请求完成
- 等待发出 AngularJS HTTP 请求
- 如何等待 ajax 请求
- 让代码等待,直到 AJAX 请求完成
- 如何在 UI5 中等待 JSONModel.loadData() 请求
- 等待请求完成并返回数据
- 力量角器's on准备等待异步http请求
- 等待React Render,直到请求之后
- AngularJs控制器没有't等待$http请求
- 等待中的两个ajax请求成功函数的执行
- javascript restler如何阻止/等待请求
- 如何在异步函数中等待请求方法
- 在请求内部等待请求完成
- 等待请求完成Node.js
- 等待请求完成