在Ajax开发中,会遇到浏览器缓存内容的问题,比如,某个元素注册了鼠标事件(onmouseover),事件触发后会通过xmlhttprequest到服务器获取内容,在不刷新页面的情况下,浏览器会缓存第一次请求的内容,服务端更新后浏览器仍然显示第一次的内容。
通常,这种请求都 是xmlhttprequest发起的GET请求。根据 HTTP 规范,GET 用于信息获取,而且应该是幂等的。也就是说,当使用相同的URL重复GET请求会返回预期的相同结果时,GET方法才是适用的。当对一个请求有副作用的时 候(例如,提交数据注册新用户时),应该使用POST请求而不是GET。所以浏览器会对GET请求做缓存处理。
解决办法:
一. GET请求URL后加随机数,让服务器认为不是相同的请求。
例 "http://www.example.com/index.php?class=aitcle&page=5&_t=" + new Date().getTime()
二. 在ajax发送请求前加上 xmlHttpRequest.setRequestHeader("If-Modified-Since","0")
三. 在ajax发送请求前加上 xmlHttpRequest.setRequestHeader("Cache-Control","no-cache");
四. 服务端响应请求时加 header("Cache-Control: no-cache, must-revalidate"); (PHP)
五. 使用POST代替GET,浏览器不会对POST做缓存
分享到:
相关推荐
**Ajax清除IE缓存技术文档** Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使网页实现异步更新,大大提升了...
目录 一、问题重现 二、通过为URL地址添加后缀的方式解决问题 三、通过JQuery的Ajax设置解决问题 四、通过定制响应解决问题一、问题重现我们通过一个ASP.NET MVC应用来重现IE针对Ajax请求结果的缓存。在一个空ASP...
为了防止IE浏览器缓存AJAX请求的结果,可以在每次发送AJAX请求时,向URL中添加一个随机参数,通常使用当前时间戳或者随机数。这样做可以让每个请求的URL都变得独一无二,从而绕过浏览器的缓存机制。 示例代码如下...
在Web开发中,Ajax技术因其异步通信特性而被广泛应用,但在实际项目中可能会遇到缓存问题,比如在进行数据更新操作时(如删除、修改),由于浏览器缓存的存在导致请求返回的是之前的数据状态而非最新的服务器数据...
换句话说,在缓存过期之前,针对相同地址发起的多个Ajax请求,只有第一次会真正发送到服务端。在某些情况下,这种默认的缓存机制并不是我们希望的(比如获取实时数据),这篇文章就来简单地讨论这个问题,以及介绍几...
然而,在Internet Explorer(IE)浏览器中,如果XMLHttpRequest请求的URL与历史记录中的某个URL相同,IE会使用缓存中的数据,而不会向服务器发送新的请求。这可能导致用户看到的是旧的数据,而不是最新的服务器响应...
同时,针对不同的浏览器环境,我们也需要考虑兼容性和缓存等问题,以确保Ajax请求能够在各种环境中稳定运行。随着Web开发技术的发展,虽然Ajax不再像过去那样被频繁提及,但其核心思想仍然广泛应用于现代Web开发中。
- **GET请求的缓存问题**:IE浏览器会缓存GET请求。为防止这种情况,可以在URL后添加一个随机数或者时间戳,如`'check_uname.do?username=tom×tamp=' + new Date().getTime()`。 ### 乱码问题与解决 - **POST...
发现此ajax请求用的get方式,每次请求的URL一模一样,IE浏览器有个特殊的地方,如果每次请求的URL一样时,就会拿出缓存中已有的数据显示在页面上,并不会再次去查询数据库,所以每次显示的都是旧数据。 解决办法: ...
对于IE浏览器,由于其对GET请求的特殊处理,有时会缓存Ajax请求,从而影响到数据的实时性。本文将详细介绍如何解决这一问题。 首先,我们要理解问题的根源。IE浏览器为了提高加载速度,会对GET请求的资源进行缓存,...
总的来说,`httpwatch`作为一个强大的工具,极大地简化了在IE环境下对AJAX请求的调试工作,为开发者提供了全面、直观的网络请求视图,从而提高了开发效率和问题解决速度。在实际项目中,善用这类工具将大大提高我们...
在IE9浏览器中,如果一个Ajax请求与之前发送的请求完全相同,那么IE9会从本地缓存中直接取数据,而不是再次从服务器端请求,从而导致无法获取最新的数据。 为了解决这个问题,可以采用在请求的URL中添加一个时间戳...
因为,在默认情况下,IE会缓存ajax的请求结果。对于同一个URL地址,在缓存过期之前,只有第一次请求会真正发送到服务端。大多数情况下,我们使用ajax是希望实现局部刷新的,所以这就牵扯到一个改进的问题。 如果想...
然而,IE浏览器的缓存机制有时会导致Ajax请求的数据不更新,即当Ajax请求相同URL时,浏览器可能会从本地缓存中读取旧数据,而非向服务器发起新的请求。 IE浏览器的这种行为主要出现在GET请求中。由于GET请求的URL和...
- **IE8的Ajax缓存问题**:IE8有时会缓存Ajax请求,导致无法获取最新的数据。可以在请求URL末尾添加时间戳或随机数来强制浏览器认为这是新的请求。 - **IE8的内存泄漏问题**:jQuery 1.4+版本中存在导致IE8内存泄漏...
由于IE浏览器默认会缓存Ajax请求,这个方法虽然可以解决问题,但是每次请求都要修改URL,略显麻烦。 另一种方法是在$.ajax()请求中设置cache属性为false。默认情况下,cache参数为true,意味着请求可能会被缓存,...