在使用jQuery.ajax()异步方法的时候发现一个返回数据混合的漏洞,记录下来分享给大家。
最近在做一个数据统计分析的项目,由于网页需要加载多个数据统计的表格,而且查询数据统计表格的方法比较耗时。所以在网页的初始化加载中调用了多个jQuery.ajax()的异步请求方法,分别请求不同的数据统计表格的数据。
经过多次的调试,发现如果使用同步调用的话能够实现效果(界面需要等待,加载慢),但是异步调用却总是实现不了想要的效果。后来发现jQuery.ajax()的error返回结果中,两次请求的数据混合到了一起。
项目使用SpringMVC框架,通过response返回结果,在chrome 55和IE 11中使用得到相同的结果。
Java后台的调用:
jQuery.ajax()的异步调用:
A方法和B方法分别为两个比较耗时的后台方法,页面加载时使用两个jQuery.ajax()异步请求方法,方法回调error输出后台返回数据。
可以发现在前端控制台输出的结果中,一个前端返回为“两个后台方法返回数据的混合”,而另一个返回为空。再看后台Java中,两个后台方法使用的request和response的HashCode是相同的。也就是说,即使前端的写法是发起两个不同的异步请求,但是实际上只发起了一个request请求。所以调用的两个后台方法返回结果都会放到同一个response中。
而 jQuery.ajax()同步请求方法是发起两个不同的request请求的。
以上是开发过程中发现的问题,如果测试、结论有不严谨的地方,请指出。
来源:oschina
链接:https://my.oschina.net/u/1863428/blog/810340