JQuery AJAX提交中文亂碼的解決辦法

2022-03-31 07:08:24 字數 1162 閱讀 6150

jquery是乙個非常優秀的框架,在特定場合下使用jquery提交資料,相當的方便快捷。 但是,在處理乙個gb2312編碼的**ajax提交時,中文資料卻成了亂碼。

現象如下:

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**加上:

測試,ok!!!

jquery ajax提交中文亂碼問題

post jquery提交中文引數服務端獲取的引數成亂碼問題 對傳輸的中文引數進行編碼 var namecon encodeuricomponent idname val post selectresult.do?method selectexecute4 function data text 在伺...

jquery ajax提交陣列

function bar 這個方法呼叫以後,在瀏覽器控制台裡,發現提交的url是jquerytest.html?choices 5b 5d a choices 5b 5d b choices 5b 5d c,這是因為在ajax傳送請求之前,會呼叫jquery.param 把data轉換成字串,cho...

JQuery AJAX 提交js陣列

例如 var data no 001 name 張三 score 80,75,82,66,70 post url,param data,true callbackfunc jquery.param object,traditional 引數 描述object 要進行序列化的陣列或物件。traditi...