前幾天在工作的時候,在和移動端做介面的時候發現,前端在傳遞參數的時候其中有+或者&時候,伺服器獲得串中+或者&都變成了空格,後台Java程式在解析的時候出錯了!
具體代碼如下:
$(function () { var isPc = !(window.__detect.android||window.__detect.ios||window.__detect.phone), moonCakeNums, moonCakeIdentify= 0, <span style="color:#ff0000;">token = userCookieControl.getCookie('authtoken'), APP_ARGS = token?'&authtoken='+encodeURIComponent(token)+'&from=m':'',</span> GUAGUA_SCHMA = 'guagua://guagua::5::13:1;18:2', //guagua://guagua::8::21:2 //退出的登入地址 logoutBackUrl = 'http://event.guagua.cn/event/zhongqiu/index.html'; //防止使用者重複提交 function blockAjax(delay){ var $elem = $('body'), isBlock = $elem.attr('data-block'); if(isBlock) return true; $elem.attr('data-block', 'block'); setTimeout(function(){ $elem.removeAttr('data-block'); }, delay||1200 ); } //登入彈框 function popupLoginDlg(){ if(isPc){ //末登入 guaguaLR._run('l'); } else { window.location.href = GUAGUA_SCHMA; } } function __checkLogin(){ var isLogin = checkLoginStatus(); if(!isLogin) popupLoginDlg(); return !!isLogin; } //ios首頁隱藏兌換按鈕 //if(window.__detect.ios) $('#J_exchange_btn').hide(); //首頁兌換按鈕 $('#J_exchange_btn').bind('click', function(e) { e.preventDefault(); if(__checkLogin()) { window.location.href = './duihuan.html'; }});
其中從移動App的頁面cookie獲得使用者的登入資訊(authtoken)中的含有+和&符號,導致服務端獲得authtoken時解析錯誤了,解決的方式就是對authtoken進行URL轉義。代碼如下:
APP_ARGS = token?'&authtoken='+encodeURIComponent(token)+'&from=m':'',
這樣伺服器就能夠獲得正常的authtoken,並解析得到其中使用者資訊。