需求:在实际开发过程中遇到一个问题,要求页面某些数据在初始化加载的时候根据登陆用户,把有关区镇等信息从用户表中获取并初始化加载进去,用户可以再做修改,用户做出修改后保存相关报表到新的数据库表中,再进入时可以展示相关报表保存的区镇等信息。
问题描述:加载用户信息和相关报表的初始化数据都为Ajax异步请求,线下测试换其他地区,保存数据,重新进入能加载到报表的数据,线上测试发现保存后再次进入加载的区镇等信息有时为用户信息,有时为报表保存的信息。
原因:多个Ajax请求为异步并发执行,没有执行顺序,根据请求响应的速度决定那个先返回结果。
个人见解:页面js代码加载用户的Ajax请求方法写在初始化数据的Ajax请求前,线下测试数据量小,请求相应时间短,每次都能按照正常需求加载数据,线上数据量大,Ajax返回结果的顺序不确定,数据加载有时能按照需求加载报表中保存的区镇等有关信息,有时加载的是用户中保存的信息
解决方法:1.将初始化数据的方法放入到加载用户信息的回调函数最后
2.关闭Ajax的异步请求为同步请求
3.windows.onload = function{}方法将Ajax请求改为页面加载完后执行