IT兄弟连 JavaWeb教程 AJAX常见问题

本文详细解析了Ajax请求中POST与GET方式下出现的中文乱码问题及其解决方案,同时介绍了如何处理不同浏览器对相同请求地址的缓存问题,确保数据正确传输。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值