最近項目中遇到一個問題,有一個登錄頁,點擊登錄后,公司兩個土豪金都不能正常跳轉(但是登錄請求已經發送到服務器了),其他人的手機都正常。項目又要急着上線,內心這個抓狂啊。。最后靜下心來,終於把問題給解決了。
解決過程:
由於服務器有接收到客戶端的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;
}
}
