IE浏览器仅返回相同URL的相同结果。因为默认情况下,IE缓存Ajax的请求结果。对于相同的URL地址,只有第一个请求实际发送到服务器,直到缓存过期。大多数情况下,使用Ajax是想进行本地刷新,因此包括改进问题。
如果想每次都获取到最新数据,我们只需保证每次传入的URL不一样。最简单的方法就是通过给url拼接参数。利用math函数的random()方法生成随机数。
比如访问百度www.baidu.com,我们就可以把地址写成www.baidu.com?t=Math.random();或者?t=new Date().getTime();
********************************分割线**********************************
说到这里,不妨复习一下ajax的基本用法。
*Ajax创建对象:
var xmlhttp; if (window.XMLHttpRequest){ //IE7+, Firefox, Chrome, Opera, Safari xmlhttp = new XMLHttpRequest(); } else{ //IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); }
*Ajax请求:
//GET请求: xmlhttp.open("GET","test1.txt",true); xmlhttp.send(); //POST请求: xmlhttp.open("POST","demo_post.asp",true); xmlhttp.send();
GET 还是 POST?
与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用。
然而,在以下情况中,请使用 POST 请求:
无法使用缓存文件(更新服务器上的文件或数据库)
向服务器发送大量数据(POST 没有数据量限制)
发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠
*Ajax响应:
要获得服务器的响应,需要使用XMLHttpRequest 对象的 responseText 或 responseXML 属性。
ResponseText:获得字符串形式的响应数据。
document.getElementById(“myDiv”).innerHTML=xmlhttp.responseText;
ResponseXML:获得XML形式的响应数据。
如果来自服务器的响应是 XML,而且需要作为 XML 对象进行解析。
*Ajax – onreadystatechange :
当请求被发送到服务器时,我们需要执行一些基于响应的任务。
每当 readyState 改变时,就会触发 onreadystatechange 事件。
在 onreadystatechange 事件中,我们规定当服务器响应已做好被处理的准备时所执行的任务。
当 readyState 等于 4 且状态为 200 时,表示响应已就绪:
xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; } }
补充:下面看下浅谈Ajax解决浏览器的缓存问题
Ajax能够加快页面加载速度的主要原因是通过Ajax减少冗馀数据加载。也就是说,在加载数据的过程中,将数据缓存在内存中。数据加载后,除非刷新页面,否则数据将缓存在内存中。如果提交的URL与历史URL匹配,则无需提交到服务器。也就是说,不需要从服务器导入数据。可以减少服务器,但为了确保读取的信息是最新的,必须禁止缓存功能。
解决方案有如下几种:
① 在Ajax发送请求前加上anyAjaxObj.setRequestHeader(“If-Modified-Since”, “0”)。
② 在Ajax发送请求前加上anyAjaxObj.setRequestHeader(“Cache-Control”, “no-cache”)。
③ 在URL后加上一个随机数:”fresh=” + Math.random();。
④ 在URL后加上时间搓:”nowtime=” + new Date().getTime();。
⑤ 如果是使用jQuery,则用$.ajaxSetup({cache:false})。这样页面的所有Ajax都会执行该语句而不需要保存缓存记录。
暂无评论内容