1 中文亂碼問題瀏覽器
● POST提交亂碼緩存
亂碼緣由:全部瀏覽器對Ajax請求參數都使用UTF-8進行編碼,而服務器默認使用ISO-8859-1去解碼,因此產生亂碼。服務器
解決方法:在服務器接收請求參數前設置解析編碼。dom
request.setCharacterEncoding("UTF-8");編碼
● GET提交亂碼code
亂碼緣由:IE瀏覽器發送請求時,會默認使用GBK字符集對請求參數進行編碼,而其餘瀏覽器會使用UTF-8.服務器默認狀況下使用的時ISO-8859-1進行解碼,因此產生亂碼。對象
解決方法:在瀏覽器發送請求前,先將URL利用encodeURI()編碼。encodeURI會使用UTF-8對請求地址中的中文進行編碼。get
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());