1. 程式人生 > >ajax亂碼解決記錄

ajax亂碼解決記錄

做j2ee web專案,很多時候都直接在jsp頁面設定編碼為:GBK。而在表單中提交資料到後臺服務時遇到中文亂碼,我們也會輕車熟路的在web.xml中增加編碼過濾器:

 <filter>
  <filter-name>Set Character Encoding</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
   <param-name>encoding</param-name>
   <param-value>GBK</param-value>
  </init-param>
  <init-param>
   <param-name>forceEncoding</param-name>
   <param-value>true</param-value>
  </init-param>
 </filter>
 <filter-mapping>
  <filter-name>Set Character Encoding</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

注:此過濾器只對post方式提交的資料有效,get方式需要採用另外的方法解決。

但用到ajax提交資料時,發現該過濾器失效,中文資料到後臺,還是亂碼。網上關於ajax提交資料成亂碼的解決方法很多,在實際的專案開發中並不好用。在此僅提供另一種解法方法,作為一種參考。

分析:ajax提交資料時,是將資料進行UTF-8編碼後傳送的,請求資料到達過濾器進行解碼時,UTF-8和GBK並不是相容型編碼。所以經過過濾器後還是亂碼。如果將過濾器的編碼設定為:UTF-8則可以正確解碼中文資料。但這樣一來,jsp頁面提交的資料又會出現亂碼。所以可以考慮配置兩個過濾器,配置一個針對ajax請求的過濾器。

 <filter>
  <filter-name>Set Character Encoding</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
   <param-name>encoding</param-name>
   <param-value>UTF-8</param-value>
  </init-param>
  <init-param>
   <param-name>forceEncoding</param-name>
   <param-value>true</param-value>
  </init-param>
 </filter>
 <filter-mapping>
  <filter-name>Set Character Encoding</filter-name>
  <url-pattern>/ajax/*</url-pattern>
 </filter-mapping>

在對映請求路徑時,需要與前一個過濾器有所區別,如針對ajax請求的url-pattern:/ajax/*   在用到ajax請求的地方,需要注意將ajax請求的url帶上ajax標識。這樣ajax請求會先經過utf-8過濾器的處理,此時已經無亂碼,再經過第一個過濾器的處理。最後到後臺程式時,資料已經無亂碼問題了。

此方法需要約定ajax請求的url遵循一定的規則。