JQuery AJAX提交中文亂碼的解決方案_jquery

來源:互聯網
上載者:User

現象如下:

1)在Firefox下,處理頁面的編碼為gb2312,提交資料沒有問題,中文能夠正確解析;

2)在IE8下,處理頁面的編碼為gb2312,提交中文資料出現亂碼。

無論是$.post還是$.ajax,抑或$.ajaxSubmit(來自於Form外掛程式),在之前的UTF-8編碼的網站都沒有出現過任何問題, 看來是由於提交資料的網頁的編碼格式造成的了。不管怎麼樣,既然是瀏覽器之間存在差異,還是從HTTP包來看有什麼問題吧。

開啟Fiddle,分別用Firefox和IE做一個AJAX提交(以使用者登入狀態例),檢查他們的HTTP頭,發現

1)兩個瀏覽器提交的Form資料是一致的,都是進行了UTF-8的編碼,如下圖所示。


分析:JQuery的AJAX提交,會將要提交的資料進行編碼,使用encodeURIComponent在js中處理資料。因此,無論是 Firefox或者IE,提交的資料都是一致的,都是UTF-8編碼後的資料。

2)查看Header,發現Entity中的Content-Type存在差異

在Firefox中,Content-Type指定了字元集為utf-8。


而在IE8中,卻沒有任何的字元集指定。


分析:顯然,預設情況下,AJAX的非同步提交的字元編碼應該和網頁本身保持一致,也就是說,Server端在沒有發現顯示的charset指定的情 況下,使用gb2312來解碼資料(但是資料在提交前已經被UTF-8編碼了),這就是為什麼在IE下會出現亂碼的根源,而在Firefox下,瀏覽器在 提交AJAX資料的時候,加上了charset的顯示指定,導致Server端採用UTF-8來解碼資料(正確解碼)。

推斷:看來要解決這個中文亂碼問題,就必須給AJAX非同步提交指定顯 示的charset!

馬上查閱JQuery的AJAX工具函數的說明,發現options中有一個指定content-type的參數,給我的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!!!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.