日期:2014-05-16  浏览次数:20809 次

Ajax传参数遇到的问题 - Web 开发 / Ajax
前台:
var username = $.trim($("#username").val());
var url="getuserinfo.do?username="+username;
  $("#NumID").html("正在读取用户信息……");
$("#GameName").html("");
var params = null;
  $.ajax({  
type:"POST",  
url:url,  
dataType:"text",  
data:params,  
success:function(text){  
if (text == 0) {
$("#NumID").html("<font color='red'>该用户不存在</font>");
$("#GameName").html("<font color='red'>该用户不存在</font>");
$("#flag1").val("false");

if (text !=0) {
var array=new Array(2);
array=text.split("%");
$("#NumID").html(array[0]);
$("#GameName").html(array[1]);
$("#flag1").val("true");
}
},  
error:function(){  
alert("获取信息出错");  
$("#flag1").val("false");
}  
});
后台:username = new String(request.getParameter("username").getBytes("iso-8859-1"),"GBK");
如果username里含有% 就会报错“警告: Parameters: Character decoding failed. Parameter skipped.”
不知道含有其他字符是不是也会报错,该如何解决

------解决方案--------------------
那就没办法了.含有特殊符号一般都不能进行转换
 
你看我这种办法可以不楼。 你先对USERNAME进行判断,不然USERNAME中含有非法符号
如%..
可以用正则表达式进行判断。判断以后再把指传过去
------解决方案--------------------
在提交的网址中,很多双字节字符会被编码成%A5%EB,大家可以打开百度,随便搜点中文的东西,然后看地址栏:比如http://www.baidu.com/s?wd=%c0%ee%b9%fa%b2%d3&ch=&tn=shnetzone_pg&bar=
如果楼主的地址突然多出一个%,解码时就会被认为遇到该解码的东西了,尝试解码极可能失败,我打赌你的用户名如果%后面是2位十六进制字符就没事。
解决的办法有两个:
1.过滤掉%,不过从上面的情况看出来,可能楼主不愿这样做
2.在提交之前,把%变成%25就ok啦