当前页面: 开发资料首页 → J2EE 专题 → 关于AJAX用POST方法提交数据的乱码问题,谢谢。
关于AJAX用POST方法提交数据的乱码问题,谢谢。
摘要: 关于AJAX用POST方法提交数据的乱码问题,谢谢。
我在网上找了些流行的解决方法,怎么也不行,现在我把代码贴在这里,哪位大侠来帮下忙指点一下。
测试环境:tomcat5.0(操作系统winxp),使用struts,开发环境eclipse3.2;
注:我写了个Filter,执行过setCharsetEncoding("GB2312");
相关的几个文件:
1.页面文件:
<%@ page language="java" import="java.util.*" pageEncoding="GB2312?%>
<%
String path = request.getContextPath();
%>
HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<head>
AJAX提交页面 <script type="text/javascript">
function justdo(){
var post="hh=中文内容!";
//post = encodeURI(post);//这里使用不使用这句话没有作用。
var xmlObj = new ActiveXObject('Msxml2.XMLHTTP');//这里没有进行过多的判断,仅测试
var URL = '<%= path%>/MenuMgr.do?method=modify&title=文章标题&id=333';
xmlObj.open ('POST',URL,true);
xmlObj.setrequestheader("Content-Length",post.length);
xmlObj.setrequestheader("cache-control","no-cache");
xmlObj.setrequestheader("Content-Type","application/x-www-form-urlencoded; charset=gb2312");
//charset="gb2312"加不加也没有什么作用。
xmlObj.send (post);
}
</script>
</head>
<body>
<input name="ModMenu" type="button" id="ModMenu" value="修改" onclick="justdo()"/>
</body>
2。服务器端的处理:
我用一个循环遍历,将所有参数都输出,代码如下:
private void PrintHeader(HttpServletRequest request){
log.info("request头信息:");
for (Enumeration e = request.getHeaderNames() ; e.hasMoreElements() ;) {
String h = (String) e.nextElement();
String v = request.getHeader(h);
log.info(h + ":" + v);
}
}
3。输出的结果如下:
[INFO] com.wallimn.login.ActMenuMgr - 请求参数: hh = 乱码
[INFO] com.wallimn.login.ActMenuMgr - 请求参数: title = 文章标题
[INFO] com.wallimn.login.ActMenuMgr - 请求参数: id = 333
[INFO] com.wallimn.login.ActMenuMgr - 请求参数: method = modify
请注意上面的结果:通过URL传递的中文可以正确显示(即title的值),而用send方法通过POST方式传上来的数据是乱码(即hh的值),请问这是怎么回事??
注:我写了个Filter,执行过setCharsetEncoding("GB2312");
可以用escape和unescape封一下
呵呵,谢谢回复,
我用URIencode处理了一下,这个函数是不是与escape一样的效果的呀。处理与不处理效果没有没有什么变化。
xmlObj.setrequestheader("Content-Length",post.length);
xmlObj.setrequestheader("cache-control","no-cache");
xmlObj.setrequestheader("Content-Type","application/x-www-form-urlencoded;charset=gb2312");该为
var ajaxHeaderName="Content-Type";
var ajaxHeaderValue="application/x-www-form-urlencoded";
req.setRequestHeader(ajaxHeaderName,ajaxHeaderValue);
试一下
老大,你的方法跟我的方法有啥区别
谢谢关注,我自己解决了这个问题。给分。