Posted on 2008-06-20 16:43
陕西BOY 阅读(4353)
评论(0) 编辑 收藏
今天上午做项目时候因为要用到ajax异步提交数据,这里我用的是prototype.js里包的ajax对象,大家也可以自己实现XMLHttpRequest对象,vm页面用的是gbk编码(如果是utf-8就不会有问题了),这个url带有两个参数,一个是id,一个是汉字内容,浪费了不少时间!以下是说明:
例如如下js:
function editPollDetail(pollDetailId,pollId)
{
var xuanxiangneirong=document.getElementById('xuanxiangneirong'+pollDetailId);
var url = 'createThread.do';
var pars = 'method=editOnePollDetail&pollDetailId='+pollDetailId+'&content='+xuanxiangneirong.value+'&pollId='+pollId;
var ajax = new Ajax.Request(url,{method:'post',parameters:pars,onComplete:showEditResult});
}
其中xuanxiangneirong是中文,开始我用了很多方法,在action中utf-8,gbk ,iso8859-1相互转换,用了3的排列的可能全试了, 就是不行。于是上网又转了很长时间看了很多,还是不行,最后我自己解决了这个问题,代码如下:
function editPollDetail(pollDetailId,pollId)
{
var xuanxiangneirong=document.getElementById('xuanxiangneirong'+pollDetailId);
var url = 'createThread.do';
var pars = 'method=editOnePollDetail&pollDetailId='+pollDetailId+'&content='+encodeURI(encodeURI(xuanxiangneirong.value))+'&pollId='+pollId; //注意这里用了两次js的encodeURI进行转码。
var ajax = new Ajax.Request(url,{method:'post',parameters:pars,onComplete:showEditResult});
}
在action中做如下的处理:
public ActionForward editOnePollDetail(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
{
response.setContentType("text/plain; charset=GBK");
String id=request.getParameter("pollDetailId");
String pollid=request.getParameter("pollId");
String content=request.getParameter("content");
try
{
content=URLDecoder.decode(content,"utf8"); //因为ajax默认是utf-8编码,这里将刚才的转码进行解析,这样得到就是你要传的汉字了。
System.out.println(content);
}catch(Exception e)
{
System.out.println("解码出现异常");
e.printStackTrace();
}
}
大家可以做个demo,不过建议大家以后页面都用utf-8的,这样就能避免这些问题。