[英]How to wait until the async function is done and then continue the cycle?
你们能帮我吗? 我需要等到异步功能在周期中完成,然后再继续周期。 我想获取附件文件的url,然后将其插入html。
function getProjects(){ $.ajax({ url: "/_api/web/lists/getbytitle('Projects')/items?$orderby=Title asc", method: "GET", headers: { "accept": "application/json;odata=verbose" }, success: function (data){ var items = data.d.results; var result = ''; for (var i = 0; i < items.length; i++) { result += '<tr>'; result += '<td>'+items[i].Organization+'</td>'; result += '<td>'+items[i].Title+'</td>'; result += '<td>'+items[i].Contact+'</td>'; result += '<td>'+items[i].Description+'</td>'; result += '<td>'+items[i].Manager+'</td>'; result += '<td>'+items[i].Participates+'</td>'; getAttachments(items[i].Id).done(function(url){ console.log('1'); }); console.log('2'); result += '</tr>'; } $('#tableProjects').html(result); }, error: function (err) { alert(JSON.stringify(err)); } }); }
有2个选项供您选择
a) 使用ajax参数async (不推荐这种方法)
async : false
上面的参数将确保您的浏览器等待调用完成,然后继续进行。 从用户的角度来看,上述方法不好,因为如果您正在上载文件或请求花费很长时间,则对用户而言,它将显示已挂起浏览器
b) 在成功函数中编写完整代码 :这是遍历代码的更好方法,找到要在ajax调用后执行的代码段,然后将其粘贴到成功回调中。 这种方法似乎有点困难,但是一旦您习惯了这种方法,您将了解javascript中异步回调的功能。
好吧,我希望您可以使用$.when
和.then
,如下所示:
首先在函数内部声明一个布尔var
function getProjects(){
var valid=false;
$.when(
$.ajax({
url: "/_api/web/lists/getbytitle('Projects')/items?$orderby=Title asc",
method: "GET",
headers: {
"accept": "application/json;odata=verbose"
},
success: function (data){
dataObtained=data;
valid=true;
}
$('#tableProjects').html(result);
},
error: function (err) {
alert(JSON.stringify(err));
}
})).then(function(){
if(valid)
{
var items = dataObtained.d.results;
var result = '';
for (var i = 0; i < items.length; i++) {
result += '<tr>';
result += '<td>'+items[i].Organization+'</td>';
result += '<td>'+items[i].Title+'</td>';
result += '<td>'+items[i].Contact+'</td>';
result += '<td>'+items[i].Description+'</td>';
result += '<td>'+items[i].Manager+'</td>';
result += '<td>'+items[i].Participates+'</td>';
getAttachments(items[i].Id).done(function(url){
console.log('1');
});
console.log('2');
result += '</tr>';
}
});
}
我做到了! )))
function uploader(i,items) { if( i < items.length ) { table += '<tr>'; table += '<td>'+items[i].Organization+'</td>'; table += '<td>'+items[i].Title+'</td>'; table += '<td>'+items[i].Contact+'</td>'; table += '<td>'+items[i].Description+'</td>'; table += '<td>'+items[i].Manager+'</td>'; table += '<td>'+items[i].Participates+'</td>'; getAttachments(items[i].Id).done(function(url){ table += '<td>'+url+'</td>'; table += '</tr>'; uploader(i+1,items); }); }else{ $('#tableProjects').html(table); } } function getProjects(){ $.ajax({ url: "/_api/web/lists/getbytitle('Projects')/items?$orderby=Title asc", method: "GET", headers: { "accept": "application/json;odata=verbose" }, success: function (data){ var items = data.d.results; table=""; uploader(0,items); }, error: function (err) { alert(JSON.stringify(err)); } }); }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.