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());