站内搜索: 请输入搜索关键词

当前页面: 开发资料首页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);
试一下


老大,你的方法跟我的方法有啥区别


谢谢关注,我自己解决了这个问题。给分。


↑返回目录
前一篇: ajax用POST方法提交的数据,如何取出来?
后一篇: 如何在myeclipse中使用hibernate配置连接oracle数据库连结池