Posted on 2008-06-20 16:43
陜西BOY 閱讀(4361)
評(píng)論(0) 編輯 收藏
今天上午做項(xiàng)目時(shí)候因?yàn)橐玫絘jax異步提交數(shù)據(jù),這里我用的是prototype.js里包的ajax對(duì)象,大家也可以自己實(shí)現(xiàn)XMLHttpRequest對(duì)象,vm頁(yè)面用的是gbk編碼(如果是utf-8就不會(huì)有問(wèn)題了),這個(gè)url帶有兩個(gè)參數(shù),一個(gè)是id,一個(gè)是漢字內(nèi)容,浪費(fèi)了不少時(shí)間!以下是說(shuō)明:
例如如下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相互轉(zhuǎn)換,用了3的排列的可能全試了, 就是不行。于是上網(wǎng)又轉(zhuǎn)了很長(zhǎng)時(shí)間看了很多,還是不行,最后我自己解決了這個(gè)問(wèn)題,代碼如下:
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進(jìn)行轉(zhuǎn)碼。
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"); //因?yàn)閍jax默認(rèn)是utf-8編碼,這里將剛才的轉(zhuǎn)碼進(jìn)行解析,這樣得到就是你要傳的漢字了。
System.out.println(content);
}catch(Exception e)
{
System.out.println("解碼出現(xiàn)異常");
e.printStackTrace();
}
}
大家可以做個(gè)demo,不過(guò)建議大家以后頁(yè)面都用utf-8的,這樣就能避免這些問(wèn)題。