开发者社区> 问答> 正文

问一个关于jquery 异步的疑惑?求助? 400 报错

问一个关于jquery 异步的疑惑?求助? 400 报错

不知道大家有没遇到过这样的问题,一个function里面含有jquery异步,会导致某些js或jquery代码执行会有问题,例如执行异步时,不是按步骤执行,在异步还没返回数据,就往下执行(回调函数赋值,往下执行),导致数据出错,还有就是这样一个问题。


function insertData(event) {
    if(printFlag == false){
//	changeStat();
//	alert('aa');
  
    changeStat();
    var obj = window.dialogArguments;
    if(obj.asName=='DanweiCbzm.pdf'){
   var url = 'writeDWCBZM?sbid='+obj.sbid+'&toNY='+obj.toNY+'&fromNY='+obj.fromNY+'&xtls='+obj.xtls+'&pch='+obj.pch+'&nsbm='+obj.nsbm+'&num='+Math.random();
		   $.post(url,function(data){
			   if(data.indexOf('success')==-1){
				   alert(data);
			   }else{
		upSuccess();
			   }
		   });
    }else if(obj.asName=='DwryCbzm.pdf'){
		   upSuccess();

    }else if(obj.asName=='GenrenCbzm.pdf'){
 		   var url = 'writeGRCBZM?sbid='+obj.sbid+'&toNY='+obj.toNY+'&fromNY='+obj.fromNY+'&xtls='+obj.xtls+'&pch='+obj.pch+'&num='+Math.random();
		   $.post(url,function(data){
			   if(data.indexOf('success')==-1){
				   alert(data);
			   }else{
				 upSuccess();
			   }
		   });
    }
	changeStat();
    }
}

function upSuccess(){
                   printFlag = true;
				   window.returnValue=true;
			//	   var url = 'PdfDownload?fileName='+event.data.filename;
			//	   $('#down').attr('href',url);
				   $('#printBut').unbind('click').removeAttr('onclick').click(function(){pdf.print();});
				   $('#genBut').unbind('click').removeAttr('onclick').click(function(){alert('证明已生成,请点击“下载打印”进行下载');});
				   if(event=='print'){
					    pdf.print();   
				   }
					$('#downBut').show();
}
		
	
function printPdf(){
	   pdf.print();
}

function show(){
$('#stat').toggle();
}


function changeStat(){
	$('#but').toggle();
	$('#stat').toggle();
}



			<div align="center" >
				
				<div id="but" style="margin-top: 10px;">	
					<input class="btn2" type="button" id="printBut" value="打印" onclick="insertData('print');" />
					    
					<input class="btn2" type="button" id="genBut" value="生成证明" onclick="insertData('down');"  />
					    
					<input class="btn2" type="button" id="downBut"  value="下载打印" style="display:none;" onclick="downPdf();"  />
					<a id="down" style="display:none;" ><span>aaab</span></a>
					    
					<input class="btn2" type="button" value="关闭" onclick="window.close();" />
</div>
<div id="stat" style="display: none;font-size: 13px;line-height: 13px;vertical-align: middle; "><img src="${path}/images/indicator.gif"/>  服务器正在处理,请稍后......</div>

上面代码中,changeStat()不会执行,可以说是跳过执行,但是如果在changeStat()附近alert一下,它又执行了,或者我吧异步注释了也会执行,我尝试过$().show()和$().hide(), 连.css('display','none')这些都是一样效果,不知道大家有没遇到过这样的问题?谢谢

展开
收起
爱吃鱼的程序员 2020-05-30 21:18:08 510 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    在异步还没返回数据,就往下执行(回调函数赋值,往下执行),导致数据出错

    如果不往下执行 那还叫什么异步?######回复 @Ever_ : 那你后面的代码 也要写在回调方法里 否则 异步有什么意义######本来就这样的啊,这就是异步啊######例如我定义 var a=false; 异步时回调函数改 a=true;,但是下面异步还没执行完就alert(a); 结果 a的值是false;不信你可以试试 后台线程睡眠5秒就可以了######ajax中加 async :false
    2020-05-30 21:18:10
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
现代Javascript高级教程 立即下载
JS零基础入门教程(上册) 立即下载
JavaScript异步编程 立即下载