(1) Ajax 中文问题 中文在做为参数传递的过程中是以UTF-8的方式对汉字进行编码。
var url = encodeURI(url);注意:IE中两次encodeURI
比如"中"这个汉字,会以%E4%B8%AD传送。
在服务器端,取到参数以后。必须要解密
String old = request.getParameter("name");
则在服务器端这样解码
String name = URLDecoder.decode(old,"UTF-8");
(2) Ajax 跨域问题
同域:如果HTML代码和服务器代码在同一个服务器上就叫同域。
跨域:如果HTML代码和服务器代码不在同一个服务器上就叫跨域。
跨域问题,Javascript出于安全性考虑,是不允许跨域调用其他页面的对象的。
通过iframe 实现安全性极差,容易导致中病毒和木马。
让页面端程序先访问同域服务器端的代理程序,通过代理程序和远端服务器上的
程序交互。因为代理程序是用java写的,所有可以访问任何远程服务器上的程序。
客户端:
function converURL(url){
if(url.substring(0,7)=="http://"){
url.replace("?","&");
url="Proxy?url"+url
}
return url;
}
代理服务器端:
(1)拿到客户端的URL和参数信息
(2)通过URL connect = new URL(url.toString());
URLConnection connection = connect.openConnection();
OutputStreamWriter paramout = new OutputStreamWriter(connection.getOutputStream());
来访问远程服务器代码,最后在代理服务器端把处理数据通过流的形式发送到浏览器上去。
(3) Ajax 缓存问题 在Ajax 中只要请求地址相同IE读取浏览器的缓冲信息没有和服务器进行交互。在请求地址上
加上时间戳,骗过浏览器,使请求地址不一样,不读取缓冲。发送新的请求。
var timestamp = new Date();
if(url.indexOf("?")>=0){
url=url+"&date"+timestamp ;
} else {
url= url+"?date"+timestamp;
}
这样保证浏览器每次请求都是不一样的。