您的位置:首页 > Web前端 > JavaScript

jsp_ajax_post 方式传参数乱码问题学习笔记

2010-11-09 23:35 501 查看
问题:我全站都是使用utf-8编码,不过在用ajax向servlet传参数的时候,firfox显示正常,IE8出现乱码。

部分源码如下:ajax(js)代码

<script language="javascript">
<!--
var xmlhttp;

function sub(id){
if(window.XMLHttpRequest){
xmlhttp =new XMLHttpRequest();
if(xmlhttp.overrideMineType){
xmlhttp.overrideMineType("text/xml");
}else if(window.ActiveXobject){
var MSXML=['Msxml2.XMLHTTP','Microsoft.XMLHTTP'];//['Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.5.0','Msxml2.XMLHTTP.4.0','Msxml2.XMLHTTP.3.0','Msxml2.XMLHTTP','Microsoft.XMLHTTP']
for(var i=0; i<MSXML.length; i++){
try{
xmlhttp= new window.ActiveXObject(MSXML);
break;
}catch(e){}
}
}

}
if(xmlhttp==undefined||xmlhttp==null){
alert("无法创建XMLHttpRequest");
}

var vl=document.getElementById(id).value;

// xmlhttp.open("GET","User_manager?bvalue="+vl,true);
// alert("41");
xmlhttp.open("POST",encodeURI("User_manager"),true);//对传的参数进行URL编码,可防止一些乱码问题。
xmlhttp.onreadystatechange=callback;
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");/charset=UTF-8.一定要加。不加就会就会出现上文的乱码问题。

xmlhttp.send(encodeURI("bvalue="+vl+"&id="+id));
//xmlhttp.send(null);
function callback(){
if(xmlhttp.readyState==4){
if(xmlhttp.status==200){
var message= xmlhttp.responseText;
///var doxml=xmlhttp.responseXML;
var button= document.getElementById(id);
alert("41");
alert(message);
button.value=message;

}
}
}
}
2 jsp 部分页面:

<input type="button" id="<s:property value='id' />" name="state" value="<s:property value='stateString'/>" onclick="sub(this.id)"></td> //这是要动态改变的按钮。

3,后台servlet。

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String value=request.getParameter("bvalue");
String id=request.getParameter("id");

总结,现在很多人纠结于中文乱码问题,其实只要全站用了utf-8编码,不建议用GBK(转码很头疼),还有Javascript也要注意编码统一(utf-8)。基本不会出现乱码问题。传参数的时候建议使用POST方式。这也容易引起乱码.而且他参数长度也有限制。要传大量参数的时候,一定要用POST方式。

问题:我全站都是使用utf-8编码,不过在用ajax向servlet传参数的时候,firfox显示正常,IE8出现乱码。

部分源码如下:ajax(js)代码

<script language="javascript">
<!--
var xmlhttp;

function sub(id){
if(window.XMLHttpRequest){
xmlhttp =new XMLHttpRequest();
if(xmlhttp.overrideMineType){
xmlhttp.overrideMineType("text/xml");
}else if(window.ActiveXobject){
var MSXML=['Msxml2.XMLHTTP','Microsoft.XMLHTTP'];//['Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.5.0','Msxml2.XMLHTTP.4.0','Msxml2.XMLHTTP.3.0','Msxml2.XMLHTTP','Microsoft.XMLHTTP']
for(var i=0; i<MSXML.length; i++){
try{
xmlhttp= new window.ActiveXObject(MSXML);
break;
}catch(e){}
}
}

}
if(xmlhttp==undefined||xmlhttp==null){
alert("无法创建XMLHttpRequest");
}

var vl=document.getElementById(id).value;

// xmlhttp.open("GET","User_manager?bvalue="+vl,true);
// alert("41");
xmlhttp.open("POST",encodeURI("User_manager"),true);//对传的参数进行URL编码,可防止一些乱码问题。
xmlhttp.onreadystatechange=callback;
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");/charset=UTF-8.一定要加。不加就会就会出现上文的乱码问题。

xmlhttp.send(encodeURI("bvalue="+vl+"&id="+id));
//xmlhttp.send(null);
function callback(){
if(xmlhttp.readyState==4){
if(xmlhttp.status==200){
var message= xmlhttp.responseText;
///var doxml=xmlhttp.responseXML;
var button= document.getElementById(id);
alert("41");
alert(message);
button.value=message;

}
}
}
}
2 jsp 部分页面:

<input type="button" id="<s:property value='id' />" name="state" value="<s:property value='stateString'/>" onclick="sub(this.id)"></td> //这是要动态改变的按钮。

3,后台servlet。

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String value=request.getParameter("bvalue");
String id=request.getParameter("id");

总结,现在很多人纠结于中文乱码问题,其实只要全站用了utf-8编码,不建议用GBK(转码很头疼),还有Javascript也要注意编码统一(utf-8)。对传的参数用encodeURI() 进行URL编码,基本不会出现乱码问题。传参数的时候建议使用POST方式。这也容易引起乱码.而且他参数长度也有限制。要传大量参数的时候,一定要用POST方式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: