JasonBie

Ajax常见问题及解决

1. 缓存的问题
下面的代码会产生缓存,使得每次请求返回的结果都一样。
<script type="text/javascript">
document.onclick=function(){
var xhr=window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLDOM");
xhr.open("get","demo.php",true);
xhr.onreadystatechange=function(){
if(xhr.readyState==4 && xhr.status==200){
alert(xhr.responseTest);
}
}
xhr.send();
};
解决的办法是:
返回时加上一个时间作为参数,这样每次返回的数据都不一样。
xhr.open("get","demo.php?_t="+(new Date()),true);

 

 

2. 乱码问题
html文件一般采用UTF-8编码,而js文件一般采用GBK编码,这样输出中文时容易出现乱码问题。
解决乱码可以:
(1)在script标签中加上charset="GBK"
(2)将js文件另存为UTF-8编码
发送请求时如果客户端服务器端以及js的编码不一致也会有乱码的问题,解决办法是首先将多个文件统一编码。如果还有问题,需要在文件中硬编码加下charset设置。

 

 

3. 安全问题(跨域——Ajax只能请求在同一个服务器上的文件)
如何实现跨域访问:
首先,在页面上创建一个script标签,将src属性设置为javascript:void(0)
<script type="text/javascript" src="javascript:void(0)" id="remoteScript">
</script>
然后,动态设置script的src属性
var rs=$("remoteScript");
rs.src="要请求的页面";
*只能使用get方式请求
*IE下可以正常运行,FF下会有问题(在FF下修改script的src属性不会重新加载)
FF下可以这样来做:
var rs=$("remoteScript");
var script=document.createElement("script");
script.src="要请求的页面";
rs.parentNode.replaceChild(script,rs);
script.id="remoteScript";

posted on 2012-01-18 14:42  JasonBie  阅读(408)  评论(0编辑  收藏  举报

导航