問題背景介紹:前端
微信公衆號網頁開發的時候,點擊發送短信驗證碼,若是響應時間超長,目前測試是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