js jQuery中Ajax请求参数转义问题

前几天在工作的时候,在和移动端做接口的时候发现,前端在传递参数的时候其中有+或者&时候,服务器获得串中+或者&都变成了空格,后台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,并解析得到其中用户信息!




郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。