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());
原文地址:https://blog.51cto.com/14311187/2405092