問題背景介紹:
微信公眾號網頁開發的時候,點擊發送短信驗證碼,如果響應時間超長,目前測試是10秒左右(這個10秒左右,是我自己多次測試總結出來的規律)
超過10秒左右,就會自動請求第二遍,這個問題挺惡心。上網搜了搜,發現也有很多小伙伴遇到這個問題了,比如下面這位:
https://blog.fishlee.net/2016/07/07/double-request-from-wechat-client-with-ajax/
接着上面這個小伙伴的說,我和后端java小伙伴問了一下,搞出了一個方案,我這邊微信前端ajax 請求的時候,發送一個uuid ,
也就是說ajax 異步調用發送短信驗證碼接口的時候,上傳參數加一個uuid,然后java后端接收這個參數,留着做判斷用。往下看...
這個是個字符串,挺復雜的,實現方法如下:
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。
好了,思路就是這樣。