问题背景介绍:前端
微信公众号网页开发的时候,点击发送短信验证码,若是响应时间超长,目前测试是10秒左右(这个10秒左右,是我本身屡次测试总结出来的规律)java
超过10秒左右,就会自动请求第二遍,这个问题挺恶心。上网搜了搜,发现也有不少小伙伴遇到这个问题了,好比下面这位:web
https://blog.fishlee.net/2016/07/07/double-request-from-wechat-client-with-ajax/ajax
接着上面这个小伙伴的说,我和后端java小伙伴问了一下,搞出了一个方案,我这边微信前端ajax 请求的时候,发送一个uuid ,后端
也就是说ajax 异步调用发送短信验证码接口的时候,上传参数加一个uuid,而后java后端接收这个参数,留着作判断用。往下看...微信
这个是个字符串,挺复杂的,实现方法以下:dom
1 getUuid: function(){ 2 var len=32;//32长度 3 var radix=16;//16进制 4 var chars='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split(''); 5 var uuid=[],i; 6 radix=radix||chars.length; 7 if(len){ 8 for(i=0;i<len;i++)uuid[i]=chars[0|Math.random()*radix]; 9 } else { 10 var r;uuid[8]=uuid[13]=uuid[18]=uuid[23]='-';uuid[14]='4'; 11 for(i=0;i<36;i++){ 12 if(!uuid[i]){ 13 r=0|Math.random()*16;uuid[i]=chars[(i==19)?(r&0x3)|0x8:r]; 14 } 15 } 16 } 17 return uuid.join(''); 18 }
解决思路:上传上面的这个uuid,而后在java后端那边存起来,若是调用了微信服务端偷着给调用了第二次请求,比对一下这个uuid的值,微信偷着给第二次请求的时候,这个uuid 确定是同样的,而后java端判断,若是uuid同样的话,就在java端,睡眠掉第二个请求进程,保留第一个;异步
这样第一个就会继续,也会返回成功了。具体java代码,我也不会写,我只是个web前端er。测试
好了,思路就是这样。ui