先说情况:公司做了一个微信公众号的项目,项目中有一个过程ajax请求提交的文件,资料比较多,导致响应时间过长超过10s,10s未做出相应,微信就会重发一次同样的请求,导致数据保存了两遍。
本来以为是自己代码的问题,查了好几遍没问题,js没问题,只走一遍,但是后台就是会重复请求,把连接弄到调试工具,或者谷歌F12查看,只有一次请求,请求正常,很奇怪。
解决方法,在第一次请求的时候传进后台一个标识并存入session,等到重发的时候拿页面传递的标识与congsession取出来的标识做对比,如果一致,则表示这次请求是第二次微信重发的请求,不处理数据。到这里的时候不要以为就结束了,后台返回页面的Map现在还是空的,如果返回页面,页面的判断就不正确了,所以需要第一次请求在处理数据结束返回的结果存进session里,在第二次进入后台,判断是第二次请求,取session里面的内容,为空,就是处理还没结束,不为空,判断是处理正确还是错误,最后在第二次的时候返回到页面即为正确。
总结,基于微信开发的时候要注意微信的规则,有的东西就很坑人