前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >异步调用导致的不同步问题

异步调用导致的不同步问题

作者头像
SmileNicky
发布2019-08-29 11:08:27
4330
发布2019-08-29 11:08:27
举报
文章被收录于专栏:Nicky's blogNicky's blog

版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明。

本文链接:https://cloud.tencent.com/developer/article/1495045

业务场景:点击一个按钮的时候保存数据,同时打开一个弹窗带出保存的数据

基于这样的业务场景,最近遇到一个问题,是在ie11才发现的,点击按钮时候,后台打断点加数据库查询都验证数据是保存正确的,不过已经保存的数据是带不到弹窗页面的,问题比较奇怪,排查了挺长时间,最开始因为在ie才能重现的问题,在极速模式的360浏览器是没问题的,而且第一次点击时候没带出数据,第二次点击时候才可以带出数据,然后很容易让人联想到ie的缓存问题,不过调了大半天

加上ajax不缓存的代码,已经改成post请求,或者get请求连接后面加上一个时间戳参数都不奏效

代码语言:javascript
复制
$(function(){
			//ajax不缓存请求结果
			$.ajaxSetup({cache: false});
		});

然后经过和同事沟通,才发现自己跟错了方向,经过检查发现保存的方法是用异步的,问题就出现在这里了,首先验证是不是由于异步导致的,在保存数据代码和打开弹窗页面的代码之间加一个alert提示,发现果然,关联alert弹窗提示之后,数据正常带出,所以确定是因为异步导致的

保存的代码,注意async:true,,这里是异步的,之前可能是考虑性能问题,改成异步的

代码语言:javascript
复制
$.ajax({
			url:'${root}/saveOrUpdate.do',
			type:"post",
			async:true,
			success:function(result){
			...
			}
		});  

所以经过一番调试,给出自己的方案,解决方法是用回调函数:

保存函数:

代码语言:javascript
复制
function saveRecord(seq,callback){
	$.ajax({
			url:'${root}/saveOrUpdate.do',
			type:"post",
			async:true,
			success:function(result){
				if(callback!=undefined){
						callback(true);
				}
			}
		});  
}
代码语言:javascript
复制
    //保存成功,才会打开弹窗
    function main(seq){
    	saveRecord(seq,callbackFunction);
    
    }
    
 	/*保存时的回调函数*/
     function callbackFunction(saveSuccess){
     	if(saveSuccess){
     		//省略打开弹窗代码
     	}
     }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年08月23日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档