ajax 返回值乱码

我想用ajax+struts1.2实现一个选择公司名称后级联显示与公司相对应部门名称,出现的问题是返回值乱码(????)
请各位大虾傍明解决哈。。
代码如果下:
JSP代码:

所属公司:td> 请选择.. 公司1 公司2 公司3
所属部门: 请选择..

JS代码:
//创建xmlHttp

var xmlHttp;
//发送请求函数
function createXMLHttpRequest(url){
if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}else if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}

if(xmlHttp){
xmlHttp.open("get", url, true);
xmlHttp.onreadystatechange = processResponse;
xmlHttp.send(null);

}
}

//处理返回函数

function processResponse()
{
if(xmlHttp.readyState==4)
{
if(xmlHttp.status==200)
{
updateList();

}else
{
alert("您所请求的页面有异常!!");
}
}
}

//更新列表函数

function refreshList()
{
var companyName=document.getElementById("companyName").value;
if(companyName=="请选择..")
{
clearList();
return;
}
var url="selectDepartment.do?companyName="+companyName;
alert(url);
createXMLHttpRequest(url);
}

//清楚列表框中的所有函数

function clearList()
{
var departmentName=document.getElementById("departmentName");
while(departmentName.childNodes.length>0)
{departmentName.removeChild(departmentName.childNodes[0]);}
}

//更新列表函数

function updateList()
{
clearList();
var departmentName=document.getElementById("departmentName");
var results=xmlHttp.responseXML.getElementsByTagName("name");
var option=null;
for(var i=0;i <results.length;i++)
{
option=document.createElement("option");
//option.appendChild(document.createTextNode("1111"));
alert(results[i].firstChild.nodeValue);
var message=document.createTextNode(results[i].firstChild.nodeValue);
option.appendChild(message);
departmentName.appendChild(option);
}
}


action代码:

public class SelectDepartment extends Action {

private CompanyManage companyManage;

public void setCompanyManage(CompanyManage companyManage) {
this.companyManage = companyManage;
}

@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {

PrintWriter out=response.getWriter();
response.setContentType("text/xml;charset=UTF-8");
response.setHeader("Cache-Control", "no-cache");

String companyName=request.getParameter("companyName");
System.out.println(companyName);
//根据公司名称返回此公司所包含的部门名称集合
List strlist = companyManage.getDepartmentNamelistByCompanyName(name);
out.write(" ");
for(int i=0;i {
out.write(" "+strlist.get(i)+name>");

}
out.write(" ");
out.close();
System.out.println(out.toString());
return null;
}

}


问题描述:在JS里用alert();方式可以取出正确的中文值,在action里System.out.println(companyName);
也能打印出传入的中文值,用Debug方式可以查看到strlist 的返回值为companyName数据库里对应的部门名称值
最后在页面显示出的部门名称为乱码.

2个回答

PrintWriter out=response.getWriter();
response.setContentType("text/xml;charset=UTF-8");

这两句话的顺序放反了,
应该是先设置好响应的字符编码,再得到 PrintWriter out 。。

jsp里面是不是也要设置成utf-8:
<%@ page contentType="text/html;charset=utf-8"%>

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问