今天发现一个问题郁闷了半天,在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参数来传递即可,若有高手知道原因还望告知,不胜感激。