jQuery Ajax傳值到Servlet出現(xiàn)亂碼問題的解決方法
最近在學(xué)jquery ui,在做一個(gè)小功能的時(shí)候需要將前臺(tái)的值獲取到,通過Ajax傳遞給Servlet,然后再在返回?cái)?shù)據(jù)結(jié)果,但是在Servlet接受參數(shù)的時(shí)候,通過后臺(tái)打印,發(fā)現(xiàn)接受亂碼,代碼示例如下:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
String testword=request.getParameter("criticalword")
System.out.println(testword);
out.println(testword);
out.flush();
out.close();
}
我只用的是ajax的get方式傳遞的,所以上面也只截取了doGet()方法的代碼,那么對(duì)于亂碼,會(huì)有哪幾種情況呢,我談一下我的看法,具體每個(gè)階段的方法我會(huì)以代碼和截圖的方式給出:
1.保證jsp網(wǎng)頁沒有亂碼
首先得確保你的JSP頁面沒有亂碼,具體代碼如下:
%@page pageEncoding="utf-8" contentType="text/html;charset=utf-8" %
這句話添加在網(wǎng)頁最頂部就可以了,補(bǔ)充下page指令的兩個(gè)參數(shù)的具體含義,很多人也許會(huì)用,但是我覺得還是有必要了解下的:
a.pageEncoding參數(shù)
pageEncoding屬性用來指定JSP頁面的字符編碼,默認(rèn)為ISO-8859-1,由于該方法不支持中文,所以,如果要指定JSP頁面的字符編碼方式支持中文編碼,則需要將page指令的pageEncoding屬性設(shè)置為"GB2312"、"GBk"或"UTF-8"。
b.contentType參數(shù)
contentType屬性用來指定JSP頁面輸出內(nèi)容的類型和字符編碼方式。屬性值中的內(nèi)容類型部分可以為text/html(純文本HTML頁面)、text/plain(純文本文件)等。
2.保證jQuery Ajax在傳遞前沒有亂碼
下面貼出的Ajax代碼,我要給后臺(tái)傳遞的參數(shù)是get類型,參數(shù)名叫criticalword,代碼如下:
$('#search').autocomplete({
source:function(request,response){
alert('看看在傳遞前有沒有亂碼'+request.term);
$.ajax({
type:'get',
url:'/SGAME/servlet/IndexSearchItems',
data:{criticalword:encodeURI(request.term)},
success:function(response,status,xhr){
alert(response);
}
});
},
delay:100
})
正如我代碼紅色所標(biāo)記的,你在傳遞前先alert()彈窗,測(cè)測(cè)看是不是你的js文件已經(jīng)亂碼,如果是的話,解決方法:
1.回查上一步是不是沒解決
2.js文件編碼問題:在資源管理器用記事本打開js,然后另存為,在編碼里選擇utf-8
如下圖:

當(dāng)你的第一個(gè)彈窗沒有亂碼,那說明在傳給Servlet前沒有問題,那個(gè)在進(jìn)入下一步前先做一個(gè)準(zhǔn)備工作,如上述紅色代碼所示,先給參數(shù)轉(zhuǎn)碼:
criticalword:encodeURI(request.term)
這個(gè)轉(zhuǎn)碼是為了防止在Servlet中出現(xiàn)接收亂碼的函數(shù),形式為:encodeURI(param)
3.保證Servlet在接受Ajax的參數(shù)時(shí)(request)沒有亂碼
到了這一步說明你離成功不遠(yuǎn)了,只需要先request和resopnse設(shè)置編碼的方式,然后再解碼即可,doGet代碼如下:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
String testword=URLDecoder.decode(request.getParameter("criticalword"),"utf-8");
System.out.println(testword);
out.println(testword);
out.flush();
out.close();
}
其中主要有三個(gè)要點(diǎn):
a.response.setContentType():用于設(shè)置響應(yīng)回jsp或者Ajax的字符編碼。
b.request.setCharacterEncoding():用于設(shè)置接收請(qǐng)求的響應(yīng)編碼。
c.URLDecoder.decode():此函數(shù)需要先導(dǎo)入java.net包,用于對(duì)Ajax的編碼進(jìn)行解碼。
完成以上三個(gè)步驟后,你可以像我一樣,在返回前加一個(gè)System.out.println(yourParam)試試,如果是中文那就沒問題啦
4.保證Servlet在響應(yīng)(response)給jsp沒有亂碼
其實(shí)在第三部的要點(diǎn)b設(shè)置好后,其實(shí)返回給html或jsp就應(yīng)該之中文了。
注:如果你用的是post方法,直接在Ajax里加上contentType:application/x-www-form-urlencoded;charset=utf-8就可以了,不需要進(jìn)行轉(zhuǎn)碼。
- js與jQuery終止正在發(fā)送的ajax請(qǐng)求的方法
- jQuery通過Ajax向PHP服務(wù)端發(fā)送請(qǐng)求并返回JSON數(shù)據(jù)
- jquery跨域請(qǐng)求示例分享(jquery發(fā)送ajax請(qǐng)求)
- jquery+ajax每秒向后臺(tái)發(fā)送請(qǐng)求數(shù)據(jù)然后返回頁面的代碼
- jQuery發(fā)請(qǐng)求傳輸中文參數(shù)亂碼問題的解決方案
- jQuery ajax方法傳遞中文時(shí)出現(xiàn)中文亂碼的解決方法
- JQuery ajax 返回json時(shí)出現(xiàn)中文亂碼該如何解決
- JQuery的Ajax中Post方法傳遞中文出現(xiàn)亂碼的解決方法
- JQuery發(fā)送ajax請(qǐng)求時(shí)中文亂碼問題解決
相關(guān)文章
jQueryUI DatePicker 添加時(shí)分秒
本文主要介紹jQueryUI DatePicker添加時(shí)分秒的方法,簡單實(shí)用,需要的朋友可以參考下。2016-06-06
IE8下Jquery獲取select選中的值post到后臺(tái)報(bào)錯(cuò)問題
IE8下出現(xiàn)的問題是直接將selectedValue post發(fā)送到后臺(tái),后臺(tái)接收時(shí)會(huì)報(bào)錯(cuò),這是因?yàn)镮E8下selectedValue當(dāng)成了數(shù)組,后臺(tái)無法識(shí)別2014-07-07
jQuery zTree如何改變指定節(jié)點(diǎn)文本樣式
這篇文章主要介紹了jQuery zTree如何改變指定節(jié)點(diǎn)文本樣式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
jquery實(shí)現(xiàn)轉(zhuǎn)盤抽獎(jiǎng)功能
本文主要介紹了用的jqueryRotate插件實(shí)現(xiàn)轉(zhuǎn)盤抽獎(jiǎng)功能的方法,具有一定的參考價(jià)值,下面跟著小編一起來看下吧2017-01-01
jQuery實(shí)現(xiàn)鼠標(biāo)可拖動(dòng)調(diào)整表格列寬度
這篇文章主要介紹了通過jQuery實(shí)現(xiàn)鼠標(biāo)可拖動(dòng)調(diào)整表格列寬度,需要的朋友可以參考下2014-05-05
jquery用ajax方式從后臺(tái)獲取json數(shù)據(jù)后如何將內(nèi)容填充到下拉列表
從后臺(tái)獲取json數(shù)據(jù),將內(nèi)容填充到下拉列表,頁面做如何處理,接下來,通過本篇文章給大家實(shí)例講解jquery用ajax方式從后臺(tái)獲取json數(shù)據(jù)后如何將內(nèi)容填充到下拉列表,需要的朋友可以參考下2015-08-08

