勤学如春起之苗不见其增日有所长,辍学如磨刀之石不见其损日有所亏

 


 

1.Ajax缓存问题

如果使用的是get,那么在ie下出现缓存问题。导致代只执行一次。解决办法就是加时间戳或者随机数,使url变为唯一,这样就不会出现ie下的缓存问题了,或者改为post提交。

 1 <script type="text/javascript" >
 2         document.onclick = function () {
 3             //不同的浏览器使用不同的方法来创建 XMLHttpRequest 对象。 
 4             //Internet Explorer 使用 ActiveXObject。
 5             //其他浏览器使用名为 XMLHttpRequest 的 JavaScript 内建对象。
 6             //按照微软的方式创建对象,也可以加载最新版本的 "Msxml2.XMLHTTP" 
 7             var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
 8             //添加时间戳 解决ajax缓存问题
 9             xhr.open("get", "CacheTest.aspx?_t" + (new Date()), true);
10             //readyState有5中状态 每次都会触发 onreadystatechange 事件
11             xhr.onreadystatechange = function () {
12                 //readyState=4表示HTTP 响应已经完全接收 status=200表示全部成功,顺序不能错
13                 if (xhr.readyState == 4 && xhr.status == 200) {
14                     alert(xhr.responseText);
15                 }
16             };
17             //发送 HTTP 请求,使用传递给 open() 方法的参数,以及传递给该方法的可选请求体。
18             xhr.send();
19         };
20     </script>
View Code
第一种方法是加时间戳
var url ="CacheTest.aspx?t+“ + new Date().getTime();
 
第二种方法加个随机数
var url ="CacheTest.aspx?t+“ + Math.random();
 
小营养
  HTTP消息头控制缓存

a.输出不缓存

header("Expires:过去的一个时间");
header("Last-Modified:当前时间");
header("Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
header("Pragma:no-cache"); 
示例:
//1997年7月26日cache失效,因为时间早已经过去,所以cache失效.
header("Expires:Mon, 26 Jul 1997 05:00:00 GMT");
//cache更新时间
header("Last-Modified:" . gmdate("D, d M Y H:i:s") . "GMT");
//不缓存网页
header("Cache-Control:no-cache, must-revalidate, no-store, no-cache, must-revalidate, post-check=0,pre-check=0");
//不缓存网页
header("Pragma:no-cache");

b.输出永久缓存

header("Expires:未来最远的一个时间");
header("Last-Modified:当前时间”);

示例:
header("Expires:" .gmdate ("D, d M Y H:i:s", time() + 3600 * 24 * 30). "GMT");
header("Last-Modified:" . gmdate("D, d M Y H:i:s") . "GMT"); 

c.输入出缓存一部分时间后效

header("Expires:失效的日期");
或header("Cache-Control: max-age=60”)  //60秒后失效
header("Last-Modified:当前时间”);

 

 2.Ajax乱码问题

 1.如果引用js出现乱码问题,一般是因为编码不一样导致,默认js编码是UTF-8。统一文件的编码    
  <script type="text/javascript" src="demo.js" charset="utf-8"></script>
 2.如果文件编码一致,还有乱码问题,添加消息头,自定义告诉浏览器所使用的编码。 header("Content-Type:text/plain;charset=文件编码");
tips:Ajax请求服务器,默认服务器把请求内容转换成UTF-8编码。
 

 3.Ajax跨域问题

1.使用script标签:可以用跨域调用js文件方法,在原文件添加 <script  id="tempScript" type="text/javascript"></script>标签,动态改变src引用地址,再去处理跨域js返回的数据。

1    var rs = document.getElementById("tempScript");
2     var script = document.createElement("Script");
3     script.src = "http://www.baidu.com";
4     rs.parentNode.replaceChild(script, rs);
5     script.id = "tempScript";
View Code

tips:火狐下面,修改已有的js的src属性,不会去加载js文件,所以选择动态添加js的src方法。

 

2.修改host文件:host映射一下域名,浏览器是根据域名判断是否跨域访问的,而不是根据IP。

tips:host文件位置:C:\Windows\System32\drivers\etc\hosts

 

  

3.使用服务器端的代理:服务器可以访问网站任何资源,通过代理获取跨域的资源数据,再由代理把数据发送给应用程序。

 
posted on 2014-03-22 21:19  TheClound  阅读(176)  评论(0)    收藏  举报