成人精品一区二区三区中文字幕-成人精品一区二区三区-成人精品一级毛片-成人精品亚洲-日本在线视频一区二区-日本在线视频免费

導(dǎo)航首頁(yè) ? 技術(shù)教程 ? jQuery Ajax傳值到Servlet出現(xiàn)亂碼問(wèn)題的解決方法
全站頭部文字 我要出現(xiàn)在這里
jQuery Ajax傳值到Servlet出現(xiàn)亂碼問(wèn)題的解決方法 640 2024-02-16   

最近在學(xué)jquery ui,在做一個(gè)小功能的時(shí)候需要將前臺(tái)的值獲取到,通過(guò)Ajax傳遞給Servlet,然后再在返回?cái)?shù)據(jù)結(jié)果,但是在Servlet接受參數(shù)的時(shí)候,通過(guò)后臺(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)頁(yè)沒(méi)有亂碼

  首先得確保你的JSP頁(yè)面沒(méi)有亂碼,具體代碼如下:

%@page pageEncoding="utf-8" contentType="text/html;charset=utf-8" %

  這句話添加在網(wǎng)頁(yè)最頂部就可以了,補(bǔ)充下page指令的兩個(gè)參數(shù)的具體含義,很多人也許會(huì)用,但是我覺(jué)得還是有必要了解下的:

a.pageEncoding參數(shù)

  pageEncoding屬性用來(lái)指定JSP頁(yè)面的字符編碼,默認(rèn)為ISO-8859-1,由于該方法不支持中文,所以,如果要指定JSP頁(yè)面的字符編碼方式支持中文編碼,則需要將page指令的pageEncoding屬性設(shè)置為"GB2312"、"GBk"或"UTF-8"。

b.contentType參數(shù)

  contentType屬性用來(lái)指定JSP頁(yè)面輸出內(nèi)容的類型和字符編碼方式。屬性值中的內(nèi)容類型部分可以為text/html(純文本HTML頁(yè)面)、text/plain(純文本文件)等。

2.保證jQuery Ajax在傳遞前沒(méi)有亂碼

  下面貼出的Ajax代碼,我要給后臺(tái)傳遞的參數(shù)是get類型,參數(shù)名叫criticalword,代碼如下:

$('#search').autocomplete({
source:function(request,response){
     alert('看看在傳遞前有沒(méi)有亂碼'+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.回查上一步是不是沒(méi)解決

    2.js文件編碼問(wèn)題:在資源管理器用記事本打開(kāi)js,然后另存為,在編碼里選擇utf-8

  如下圖:

查看圖片

  當(dāng)你的第一個(gè)彈窗沒(méi)有亂碼,那說(shuō)明在傳給Servlet前沒(méi)有問(wèn)題,那個(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)沒(méi)有亂碼

  到了這一步說(shuō)明你離成功不遠(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)試試,如果是中文那就沒(méi)問(wèn)題啦

4.保證Servlet在響應(yīng)(response)給jsp沒(méi)有亂碼

 其實(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)碼。



主站蜘蛛池模板: 王艺潼| 黑木美纱| 陈学冬演过的电视剧有哪些| 93夜之女| 杨买军郑州航空港区| 黄视频在线播放| 格子论文| 张柏芝艳照无删减版| 湖南卫视节目表| 少年圆鱼洲 综艺| 宇宙巨人希曼| 汤唯惊艳写真集| 九州电影网| 张俪eyely| 真的爱你中文谐音歌词| 电影《埋葬巴斯托》| 日本女人的b| 逆光飞翔 电影| fate动漫| 凤凰资讯台| 轻舞飞扬| 奇门遁甲电影免费观看完整版| 寻梦环游记英文| 韩国电影诱惑| av网址大全| 中国的省份有哪些?| 火舞俪人 电影| 鲁迅电影| 红星闪闪歌词完整版打印| 陈一龙是哪部电视剧| 左耳演员表| 一类生字和二类生字图| 播放凯登克罗斯演的全部影片| 航班危机电影| 欧美日本视频在线观看| 佐藤蓝子| 苏打绿改名鱼丁糸的原因| 北京卫视今天全部节目表| 小小少年电影简介| 日韩 欧美 视频| 失眠咒太神奇了|

!!!站長(zhǎng)長(zhǎng)期在線接!!!

網(wǎng)站、小程序:定制開(kāi)發(fā)/二次開(kāi)發(fā)/仿制開(kāi)發(fā)等

各種疑難雜癥解決/定制接口/定制采集等

站長(zhǎng)微信:lxwl520520

站長(zhǎng)QQ:1737366103