jsp中jQuery ajax 单字符参数丢失

今天发现一个问题郁闷了半天,在jsp提交时参数只要是单个字符就无法传递到后台,如:url参数段中包含有“&test=1”在后台action class中无法获取到,但若将“&test=10”即可在后台接收到参数值,我来个郁闷呀,不过后来发现了个窍门可以解决此问题,具体原因还是没搞清楚,可能是jquer ajax的bug,不过不确定。

(我的系统jsp+struts+ibatis,不过这跟ibatis应该没有什么关系。)

以下是代码参考

无法获取参数代码:

function initTable(){
        
           var  par  = "&eachpage="+$("#record").val()+"&curpage=1&test=1";           //这里的单字符参数值将丢失如test、curpage
           par=getPar(par);                                    //这句话是获取说有参数拼接成一个参数串,如:&aaa=1&bbb=2&ccc=3&ddd=4
           $("#bodyid").html("<tr><td colspan='17' rowspan='8'  valign='middle' align='center'><img src='/images/ngbass3/loading.gif'></td></tr>");

           $.ajax({
                  url:"/jsp/ngbass3/wlan/wlanBaseAction.do",
                  type: "POST",
                  dataType: "json",
                  cache: false,
                  data: encodeURI(par+"&operate=invokeMethod&module=com.linkage.ngbass3.wlan.moudle.WlanMonitorModule&objectMethod=initDataTable"),
                  success: function(json){
                          callTableback(json);
                  }
      });  

}

修改为如下即可获取:

function initTable(){
           var  par  = "&eachpage="+$("#record").val()+"&curpage=1&test=1";           //这里的test、curpage参数值将不会丢失
           par=getPar(par);                                    //这句话是获取说有参数拼接成一个参数串,如:&aaa=1&bbb=2&ccc=3&ddd=4
           $("#bodyid").html("<tr><td colspan='17' rowspan='8'  valign='middle' align='center'><img src='/images/ngbass3/loading.gif'></td></tr>");
          
           var param = encodeURI("?operate=invokeMethod"+par+"&module=com.linkage.ngbass3.wlan.moudle.WlanMonitorModule&objectMethod=initDataTable");
          
           $.ajax({
                  url:"/jsp/ngbass3/wlan/wlanBaseAction.do"+param,    //**注意将参数拼接在url后面即可
                  type: "POST",
                  dataType: "json",
                  cache: false,
                  //data: encodeURI(par+"&operate=invokeMethod&module=com.linkage.ngbass3.wlan.moudle.WlanMonitorModule&objectMethod=initDataTable"),
                  success: function(json){
                          callTableback(json);
                  }
      }); 
}

这里关键的步骤就是将参数串直接拼接到url参数后面,而不用data参数来传递即可,若有高手知道原因还望告知,不胜感激。

猜你喜欢

转载自blog.csdn.net/huxy534/article/details/7599163