IT兄弟連 JavaWeb教程 AJAX常見問題

  • 2019 年 10 月 5 日
  • 筆記

版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。

本文鏈接:https://blog.csdn.net/ITXDL123/article/details/90896575

1 中文亂碼問題

● POST提交亂碼

亂碼原因:所有瀏覽器對Ajax請求參數都使用UTF-8進行編碼,而伺服器默認使用ISO-8859-1去解碼,所以產生亂碼。

解決方法:在伺服器接收請求參數前設置解析編碼。

request.setCharacterEncoding(「UTF-8」);

● GET提交亂碼

亂碼原因:IE瀏覽器發送請求時,會默認使用GBK字符集對請求參數進行編碼,而其他瀏覽器會使用UTF-8.伺服器默認情況下使用的時ISO-8859-1進行解碼,所以產生亂碼。

解決方法:在瀏覽器發送請求前,先將URL利用encodeURI()編碼。encodeURI會使用UTF-8對請求地址中的中文進行編碼。

var uri = 『xxx?name=張三』;

xhr.open(『get』,encodedURI(uri),true);

在伺服器端進行編碼轉換:

String name = request.getParameter(「name」);

name = new String(name.getBytes(「ISO-8859-1」),「UTF-8」);

2 快取問題

不同瀏覽器對於請求相同地址的處理方案如下:

Chrome 重新發送請求

FireFox 重新發送請求

IE 不再發送請求

IE瀏覽器提供的Ajax對象,在發送GET請求時,會先查看是否訪問過該地址,如果該地址訪問過,瀏覽器就不會再發送請求,而是取出先前瀏覽器快取的數據內容。

瀏覽器快取的解決方案:

s在請求地址後面添加一個系統時間或者一個隨機數字,例如:

xhr.open(『get』,『load.do?r=』 + new Date().getTime(),true);

或

xhr.open(『get』,『load.do?r=』 + Math.random());

Tags: