JQuery AJAX提交中文亂碼的解決方案
現(xiàn)象如下:
1)在Firefox下,處理頁面的編碼為gb2312,提交數(shù)據(jù)沒有問題,中文能夠正確解析;
2)在IE8下,處理頁面的編碼為gb2312,提交中文數(shù)據(jù)出現(xiàn)亂碼。
無論是$.post還是$.ajax,抑或$.ajaxSubmit(來自于Form插件),在之前的UTF-8編碼的網(wǎng)站都沒有出現(xiàn)過任何問題, 看來是由于提交數(shù)據(jù)的網(wǎng)頁的編碼格式造成的了。不管怎么樣,既然是瀏覽器之間存在差異,還是從HTTP包來看有什么問題吧。
打開Fiddle,分別用Firefox和IE做一個AJAX提交(以用戶登錄為例),檢查他們的HTTP頭,發(fā)現(xiàn)
1)兩個瀏覽器提交的Form數(shù)據(jù)是一致的,都是進行了UTF-8的編碼,如下圖所示。
分析:JQuery的AJAX提交,會將要提交的數(shù)據(jù)進行編碼,使用encodeURIComponent在js中處理數(shù)據(jù)。因此,無論是 Firefox或者IE,提交的數(shù)據(jù)都是一致的,都是UTF-8編碼后的數(shù)據(jù)。
2)查看Header,發(fā)現(xiàn)Entity中的Content-Type存在差異
在Firefox中,Content-Type指定了字符集為utf-8。
而在IE8中,卻沒有任何的字符集指定。
分析:顯然,默認情況下,AJAX的異步提交的字符編碼應(yīng)該和網(wǎng)頁本身保持一致,也就是說,Server端在沒有發(fā)現(xiàn)顯示的charset指定的情 況下,使用gb2312來解碼數(shù)據(jù)(但是數(shù)據(jù)在提交前已經(jīng)被UTF-8編碼了),這就是為什么在IE下會出現(xiàn)亂碼的根源,而在Firefox下,瀏覽器在 提交AJAX數(shù)據(jù)的時候,加上了charset的顯示指定,導(dǎo)致Server端采用UTF-8來解碼數(shù)據(jù)(正確解碼)。
推斷:看來要解決這個中文亂碼問題,就必須給AJAX異步提交指定顯 示的charset!
馬上查閱JQuery的AJAX工具函數(shù)的說明,發(fā)現(xiàn)options中有一個指定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
});
測試,OK?。?!
相關(guān)文章
jQuery固定浮動側(cè)邊欄實現(xiàn)思路及代碼
如果頁面比較高,當(dāng)滾動條拖到頁面的下面的時候,側(cè)邊欄會出現(xiàn)一個固定跟隨瀏覽器的DIV框,下面將思路及具體實現(xiàn)與大家分享下2014-09-09Jquery實現(xiàn)仿新浪微博獲取文本框能輸入的字數(shù)代碼
Jquery實現(xiàn)仿新浪微博獲取文本框所能輸入的字數(shù),感興趣的朋友可以研究一下代碼方便你折騰,希望本文提供的方法可以幫助到你2013-02-02從零開始學(xué)習(xí)jQuery (二) 萬能的選擇器
本章講解jQuery最重要的選擇器部分的知識. 有了jQuery的選擇器我們幾乎可以獲取頁面上任意的一個或一組對象, 可以明顯減輕開發(fā)人員的工作量.2010-10-10利用jQuery簡單實現(xiàn)產(chǎn)品展示圖片左右滾動功能(示例代碼)
本篇文章主要是對利用jQuery簡單實現(xiàn)產(chǎn)品展示圖片左右滾動功能的示例代碼進行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-01-01