JQuery AJAX提交中文亂碼的解決方案
現(xiàn)象如下:
1)在Firefox下,處理頁(yè)面的編碼為gb2312,提交數(shù)據(jù)沒(méi)有問(wèn)題,中文能夠正確解析;
2)在IE8下,處理頁(yè)面的編碼為gb2312,提交中文數(shù)據(jù)出現(xiàn)亂碼。
無(wú)論是$.post還是$.ajax,抑或$.ajaxSubmit(來(lái)自于Form插件),在之前的UTF-8編碼的網(wǎng)站都沒(méi)有出現(xiàn)過(guò)任何問(wèn)題, 看來(lái)是由于提交數(shù)據(jù)的網(wǎng)頁(yè)的編碼格式造成的了。不管怎么樣,既然是瀏覽器之間存在差異,還是從HTTP包來(lái)看有什么問(wèn)題吧。
打開(kāi)Fiddle,分別用Firefox和IE做一個(gè)AJAX提交(以用戶登錄為例),檢查他們的HTTP頭,發(fā)現(xiàn)
1)兩個(gè)瀏覽器提交的Form數(shù)據(jù)是一致的,都是進(jìn)行了UTF-8的編碼,如下圖所示。
分析:JQuery的AJAX提交,會(huì)將要提交的數(shù)據(jù)進(jìn)行編碼,使用encodeURIComponent在js中處理數(shù)據(jù)。因此,無(wú)論是 Firefox或者IE,提交的數(shù)據(jù)都是一致的,都是UTF-8編碼后的數(shù)據(jù)。
2)查看Header,發(fā)現(xiàn)Entity中的Content-Type存在差異
在Firefox中,Content-Type指定了字符集為utf-8。
而在IE8中,卻沒(méi)有任何的字符集指定。
分析:顯然,默認(rèn)情況下,AJAX的異步提交的字符編碼應(yīng)該和網(wǎng)頁(yè)本身保持一致,也就是說(shuō),Server端在沒(méi)有發(fā)現(xiàn)顯示的charset指定的情 況下,使用gb2312來(lái)解碼數(shù)據(jù)(但是數(shù)據(jù)在提交前已經(jīng)被UTF-8編碼了),這就是為什么在IE下會(huì)出現(xiàn)亂碼的根源,而在Firefox下,瀏覽器在 提交AJAX數(shù)據(jù)的時(shí)候,加上了charset的顯示指定,導(dǎo)致Server端采用UTF-8來(lái)解碼數(shù)據(jù)(正確解碼)。
推斷:看來(lái)要解決這個(gè)中文亂碼問(wèn)題,就必須給AJAX異步提交指定顯 示的charset!
馬上查閱JQuery的AJAX工具函數(shù)的說(shuō)明,發(fā)現(xiàn)options中有一個(gè)指定content-type的參數(shù),給我的AJAX代碼加上:
jQuery(form).ajaxSubmit({
url: "ajax.aspx?a=memberlogin",
type: "post",
dataType: "json",
contentType: "application/x-www-form-urlencoded; charset=utf-8",
success: showLoginResponse
});
測(cè)試,OK?。?!
- jquery實(shí)現(xiàn)ajax提交form表單的方法總結(jié)
- jquery中ajax使用error調(diào)試錯(cuò)誤的方法
- jquery中ajax處理跨域的三大方式
- jquery ajax提交表單數(shù)據(jù)的兩種方式
- jquery ajax例子返回值詳解
- JQuery的Ajax請(qǐng)求實(shí)現(xiàn)局部刷新的簡(jiǎn)單實(shí)例
- jquery ajax 向后臺(tái)傳遞數(shù)組參數(shù)示例
- JQuery處理json與ajax返回JSON實(shí)例代碼
- Jquery中ajax方法data參數(shù)的用法小結(jié)
- jQuery AJAX應(yīng)用實(shí)例總結(jié)
相關(guān)文章
完美JQuery圖片切換效果的簡(jiǎn)單實(shí)現(xiàn)
下面小編就為大家?guī)?lái)一篇完美JQuery圖片切換效果的簡(jiǎn)單實(shí)現(xiàn)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-07-07jQuery中實(shí)現(xiàn)動(dòng)畫(huà)效果的基本操作介紹
本篇文章小編將為大家介紹,在jQuery中實(shí)現(xiàn)動(dòng)畫(huà)效果的基本操作介紹,需要的朋友可以參考一下2013-04-04jQuery固定浮動(dòng)側(cè)邊欄實(shí)現(xiàn)思路及代碼
如果頁(yè)面比較高,當(dāng)滾動(dòng)條拖到頁(yè)面的下面的時(shí)候,側(cè)邊欄會(huì)出現(xiàn)一個(gè)固定跟隨瀏覽器的DIV框,下面將思路及具體實(shí)現(xiàn)與大家分享下2014-09-09JQuery復(fù)制DOM節(jié)點(diǎn)的方法
這篇文章主要介紹了JQuery復(fù)制DOM節(jié)點(diǎn)的方法,涉及jQuery中clone與appendTo方法的使用技巧,需要的朋友可以參考下2015-06-06jquery中使用ajax獲取遠(yuǎn)程頁(yè)面信息
當(dāng)我們點(diǎn)擊表格里面的標(biāo)題顯示相關(guān)的詳細(xì)信息,比如點(diǎn)擊新聞標(biāo)題顯示正文,而正文通常是在一個(gè)頁(yè)面里面,通過(guò)獲取傳遞的參數(shù)id查詢數(shù)據(jù)庫(kù),然后顯示出來(lái)2011-11-11Jquery實(shí)現(xiàn)仿新浪微博獲取文本框能輸入的字?jǐn)?shù)代碼
Jquery實(shí)現(xiàn)仿新浪微博獲取文本框所能輸入的字?jǐn)?shù),感興趣的朋友可以研究一下代碼方便你折騰,希望本文提供的方法可以幫助到你2013-02-02從零開(kāi)始學(xué)習(xí)jQuery (二) 萬(wàn)能的選擇器
本章講解jQuery最重要的選擇器部分的知識(shí). 有了jQuery的選擇器我們幾乎可以獲取頁(yè)面上任意的一個(gè)或一組對(duì)象, 可以明顯減輕開(kāi)發(fā)人員的工作量.2010-10-10利用jQuery簡(jiǎn)單實(shí)現(xiàn)產(chǎn)品展示圖片左右滾動(dòng)功能(示例代碼)
本篇文章主要是對(duì)利用jQuery簡(jiǎn)單實(shí)現(xiàn)產(chǎn)品展示圖片左右滾動(dòng)功能的示例代碼進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-01-01jQuery框架實(shí)現(xiàn)元素顯示及隱藏三種動(dòng)畫(huà)方式
在jQuery框架中對(duì)元素對(duì)象進(jìn)行顯示和隱藏有三種方式,分別是“默認(rèn)方式顯示和隱藏”、“滑動(dòng)方式顯示和隱藏”、“淡入淡出顯示和隱藏”,今天就每種方式通過(guò)實(shí)例代碼給大家詳細(xì)講解,需要的朋友參考下吧2021-06-06