最近项目中遇到一个问题,有一个登录页,点击登录后,公司两个土豪金都不能正常跳转(但是登录请求已经发送到服务器了),其他人的手机都正常。项目又要急着上线,内心这个抓狂啊。。最后静下心来,终于把问题给解决了。
解决过程:
由于服务器有接收到客户端的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; } }