ajax异步问题

-一个大坑 2018-08-09 08:54:11
我三个方法都加async: false,结果循环还是异步。
我的保存还没执行,加载页面就先执行完了,导致后面循环保存的都是同一个页面

$(document).on("click","#btnDown",function(){
$.ajax({
url: '/DLRRP01/DownAllPDF',
cache: false,
async: false,
type: 'POST',
data: {q_year:$('#q_year').val(),q_month:$('#q_month').val(),q_agentName:$('#q_agentName').val(),q_company:$('#q_company').val()},
dataType: 'json',
success: function(data){
if(data.status=='Danger'){
ShowWarningMsg(data.msg);
}else{
for(var i=0;i<data.length;i++){
alert(i);
forDown(data[i]);
};
//window.location = '/DLRRP01/ZipFolder';
}
},
error: function(e){
alert(e)
}
});

function forDown(strNo){
$.ajax({
url: '/DLRRP01/DownPDF',
cache: false,
async:false,
type: 'POST',
data: {d_no:strNo},
dataType: 'html',
contentType: 'application/json',
success: function(data){
if(data.status=='Danger'){
ShowWarningMsg(data.msg);
}else{
$("#downTable").html(data);
GetDownView();
SavePDF(strBase64, strName);
}
},
error: function(e){
alert(e)
}
});


};

function SavePDF(strBase64, strName){
$.ajax({
url: '/DLRRP01/SavePDF',
cache: false,
async: false,
type: 'POST',
data: {strBase64: strBase64,strName:strName},
dataType: 'json',
success: function(rs){
alert(rs);
},
error: function(e){
alert(e)
}
});
}

...全文
205 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
winzond 2018-08-11
  • 打赏
  • 举报
回复
GetDownView();
SavePDF(strBase64, strName);

你是说GetDownView();还没执行完,就已经执行SavePDF(strBase64, strName);了吗?这是对的,因为jQuery不会阻塞后面的语句执行,如果一定要等前面的语句执行完再执行后面的语句,需要使用回调函数,我这水平也只能使用动画callback,写不出自定义回调函数,你可以百度一下哦
-一个大坑 2018-08-11
  • 打赏
  • 举报
回复
引用 4 楼 winzond 的回复:
GetDownView();
SavePDF(strBase64, strName);

你是说GetDownView();还没执行完,就已经执行SavePDF(strBase64, strName);了吗?这是对的,因为jQuery不会阻塞后面的语句执行,如果一定要等前面的语句执行完再执行后面的语句,需要使用回调函数,我这水平也只能使用动画callback,写不出自定义回调函数,你可以百度一下哦

不,是html2canvas插件有什么控制,总是最后才执行。
-一个大坑 2018-08-10
  • 打赏
  • 举报
回复
-一个大坑 2018-08-09
  • 打赏
  • 举报
回复
调试了下,发现是网页转pdf的原因
其余的js执行完了才进入网页转pdf方法,这个要怎么解决

function forDown(strNo){
$.ajax({
url: '/DLRRP01/DownPDF',
cache: false,
async:false,
type: 'POST',
data: {d_no:strNo},
dataType: 'html',
success: function(data){
if(data.status=='Danger'){
ShowWarningMsg(data.msg);
}else{
$("#downTable").html(data);
GetDownView();

//测了半天好像是这个问题,其余的js执行完了才进入这个网页转pdf的方法,导致一直保存的最后一张图
html2canvas($('#downTable'), {
async:false
}).then(function (canvas) {
alert('pdf')
//返回图片dataURL,参数:图片格式和清晰度(0-1)
var pageData = canvas.toDataURL('image/jpeg', 1.0);
//方向默认竖直,尺寸ponits,格式a4[595.28,841.89]
var pdf = new jsPDF('l', 'mm', [intWidth, intHeight]);
pdf.addImage(pageData, 'JPEG', 0, 0, intWidth,intHeight);
var datauri = pdf.output('dataurlstring');
//去掉前面的字符串后,就是文件的加密字符串
var strBase64 = datauri.substring(28);
SavePDF(strBase64, strName);
});

}
},
error: function(e){
alert(e)
}
});


zhuizhuizhui666 2018-08-09
  • 打赏
  • 举报
回复
async: true 才是同步

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧