日期:2014-05-19  浏览次数:20812 次

ajax乱码问题,真烦
网上也找了些资料看,还是没解决,我把jsp、java文件的属性里编码都设为了gbk,过滤器中也设为gbk,在js中,也写上了xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gbk");这句,但是,提交到服务器时,收到的怎么还是乱码呢?主要代码如下:

<head>
<script language="javascript">

var xmlHttp;

function createHttpRequest(){
if (window.ActiveXObject){
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}else if (window.XMLHttpRequest){
xmlHttp = new XMLHttpRequest();
xmlHttp.overrideMimeType("text/xml");
}
}


function HandMethod(){
if (xmlHttp.readyState == 4){
if (xmlHttp.status == 200){
var text = xmlHttp.responseText;

if (text != null){
document.getElementById("UserInfo").innerHTML = text;

}

}else if (xmlHttp.status == 404){
alert("路径出现错误");
return;
}else if (xmlHttp.status == 500){
alert("服务器出现错误");
return;
}
}
}

function saveUserInfo(){

var userInfo= document.getElementById("UserInfo").innerText;

alert("UserInfo:"+userInfo);//这里提示出来的信息,还没出现乱码,说明在传到服务器前是正常的,那是不是说明是在传输过程 中变乱的呢?如果是这样,那是不是跟网络的传输协议等有关系呢?请高手指教。

createHttpRequest();
var url = "<%=path%>/user.do?task=saveUserInfo";
xmlHttp.open("post",url,true);

xmlHttp.onreadystatechange=HandMethod;

xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gbk");//这里已经设置编码了,怎么不起作用呢?
xmlHttp.send("&userName="+userInfo+"");

}


</script>

  </head>
  
  <body>

<div id="UserInfo">

  姓名:张三

</div> 

<input type="button" value="保存" onclick="saveUserInfo();"/>

  </body>
</html>

补充说明一下:
我之前不用这个:xmlHttp.send("&userName="+userInfo+"");,而直接用var url = "<%=path%>/user.do?task=saveUserInfo&userName="+userInfo+"");,服务器上得到的也是乱码,但我用下面的方法,可以转为正常,但用了xmlHttp.send("&userName="+userInfo+"");,就不能转为正常的了,很怪,望高手们多多指教,转编码的方法如下:

public String getISOtoGBK(String para) {
if (para == null || "".equals(para)) {
return "";
}
para = para.trim();
String strtmp = "";
try {
strtmp = new String(para.getBytes("iso-8859-1"), "GBK");
} catch (Exception uee) {
uee.printStackTrace();
return "";
}
return strtmp;
}

那里出问题的呢?跟浏览器有没关系呢?我用的是IE7,我编码全改为UTF-8也没效果,若表述不清楚,下次再补充吧.

------解决方案--------------------
如果用TOMCAT
把server.xml中
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/>

------解决方案--------------------
发送接收,都用utf-8就好咯
------解决方案--------------------
1.看看你整体的jsp页面是不是用的gbk
2.看看使用的编译工具编译的格式是不是gbk比方说eclipse里面的js编译方式改为gbk
------解决方案--------------------
在你的ajax servlet的service方法中、在response做输出之前:
response.setContentType("text/xml; charset=GBK");
加上那个试试
------解决方案--------------------