最近項目中遇到一個問題,有一個登錄頁,點擊登錄后,公司兩個土豪金都不能正常跳轉(但是登錄請求已經發送到服務器了),其他人的手機都正常。項目又要急着上線,內心這個抓狂啊。。最后靜下心來,終於把問題給解決了。
解決過程:
由於服務器有接收到客戶端的ajax請求,所以就看客戶端是否收到服務器的響應,在回調的success函數下alert(data.code),發現是接收到響應的,並且data.code=0,滿足跳轉條件,所以在success的else中繼續alert,最終將問題定位到 sessionStorage.setItem('loginPhone',loginPhone);這一句上面,sessionStorage是h5的特性,手機端瀏覽器一般都支持,通過alert(sessionStorage)、(sessionStorage.setItem)和alert(typeof(sessionStorage.setItem)) 發現都正常,typeof(sessionStorage.setItem)得到的是一個function,既然存在sessionStorage,又為什么不能正常執行呢。最后還是通過度娘找到了問題的根源---Safari無痕瀏覽會影響localStorage。所以只需要將這一句稍作修改即可
try { sessionStorage.setItem("loginPhone",loginPhone); } catch (e) { alert("您處於無痕瀏覽,無法為您跳轉"); }
以下是修改之前的代碼:
var loginPhone; function submitBindInfo(){ if( checkSubmitMobile($("#phone-wrap")) && checkCode() &&checkContract()) { var param={ phone:loginPhone, authcode:$("#verifycode").val() }; $.ajax({ type:"POST", url:"/portal/member/login.do", data:param, dataType:"json", timeout: 20000, error:function(XMLHttpRequest, textStatus, errorThrown){ if(XMLHttpRequest.status==408){ alert("系統繁忙,請稍后嘗試"); }else{ alert(XMLHttpRequest.status+"錯誤"); } }, success:function(data){ doSuccess(data); } }); } } function doSuccess(data){ if(data.code!=0){ loginFailCallBack(data.desc); }else{ sessionStorage.setItem('loginPhone',loginPhone); doRedirct(); } } function doRedirct(){ switch (hash){ case "#member" : window.location.href="/portal/member/showMember.do"; break; case "#myOrder" : window.location.href="/portal/myorder/showOrder.do"; break; case "#myCoupon" : window.location.href="/portal/mycoupon/showCoupon.do"; break; default : window.location.href="/portal/sinopec/step0.do"; break; } }