ajax调用中ie缓存问题解决方法 - 网站

ajax调用中ie缓存问题解决方法

分类:js_jQuery答疑 - 常见问题 · 发布时间:2021-11-07 01:06 · 阅读:10071

这篇文章主要介绍了ajax调用中ie缓存问题解决方法,较为详细的分析了ajax调用中ie缓存机制的原理与具体解决方法,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例分析了ajax调用中ie缓存问题解决方法。分享给大家供大家参考,具体如下:

ajax请求调用的过程中发现的问题:后台请求是一个简单的.aspx文件,而这个页面又没有考虑过缓存的影响,使用ajax调试的时候发现有时候根本不走后台代码直接返回结果了,所以估计是受到浏览器缓存的影响。网上搜了一下,果然是缓存的问题:“IE中如果XMLHttpRequest提交的URL与历史一样则使用缓存,根本不向服务器端提交。因此无法取到刚提交的数据或新的数据”。

解决方法大致有下面几种:

1、只改进服务器端

(1)后台是简单的.aspx文件,直接加上

复制代码 代码如下:
<%@ OutPutCache Location="None"%>
即可。

(2)但是如果后台是.ashx文件通常在类里直接修改缓存设置。

复制代码 代码如下:
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);

2、只改进客户端

(1)利用加随机数或加时间戳改变请求地址

a、加随机数:

复制代码 代码如下:
var url='AjaxOperations.aspx?rdm='+Math.random()+'&action='+op;

b、加时间戳:
复制代码 代码如下:
var url='AjaxOperations.aspx?dtStamp='+new Date().getTime()+'&action='+op;

这一种解决方案,只需要加个时间或随机数作为参数,服务器端不需要任何改动就可以达到目的。

(2)前台异步调用设置XMLHttpRequest对象的属性

在XMLHttpRequest发送请求之前加上

复制代码 代码如下:
XMLHttpRequest.setRequestHeader("If-Modified-Since","0")
个人认为这个才是“正道”。因为你不能明确哪些ajax请求是需要还是不需要缓存的(解决网站的性能瓶颈,利用有缓存的ajax居多),所以每次在发送请求的时候确认一下是否要缓存,相对于2中的第(1)条显然少写了一个url参数,而且服务器端(改进方法1)也不需要改变设置,但是对于已经封装好的ajax库,你可能已经不能在外面直接使用XMLHttpRequest对象了,通常的设置语法可能是将("If-Modified-Since","0")作为参数传递:ajaxObj.sendPost(其他参数列表,...."If-Modified-Since","0"); (post方式)

或者 ajaxObj.sendGet(其他参数列表,...."If-Modified-Since","0"); (get方式)

希望本文所述对大家ajax程序设计有所帮助。

标签:
ajax ie缓存 解决方法

相关文章

AJAX乱码与异步同步以及封装jQuery库实现步骤详解

这篇文章主要介绍了异步通信技术AJAX乱码问题、异步与同步、手动封装一个jQuery库,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

AJAX的跨域问题解决方案

跨域简单的说,就是从一个域名的网页去访问另一个域名网页的资源,下面这篇文章主要给大家介绍了关于AJAX的跨域问题解决的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

利用Ajax实现智能回答的机器人示例代码

这篇文章主要介绍了利用Ajax实现智能回答的机器人,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

ajax、axios和fetch之间优缺点重点对比总结

今天被问到用没用过ajax axios,我回答经常用axios,但ajax用的比较少,下面这篇文章主要给大家介绍了关于ajax、axios和fetch之间优缺点重点对比总结的相关资料,需要的朋友可以参考下

如何通过axios发起Ajax请求(最新推荐)

Axios是专注于网络数据请求的库,相比于原生的XMLHttpRequest对象,axios简单易用。相比于Jquery,axios更加轻量化,只专注于网络数据请求,这篇文章主要介绍了如何通过axios发起Ajax请求,需要的朋友可以参考下

返回分类 返回首页