ajax 缓存问题及解决方案

CreationTime--2018年7月25日16点04分

Author:Marydon

1.什么情况下ajax请求会出现缓存?

  当请求的路径、参数名、参数值三者都没有发生变化时,浏览器将不会再发送此请求,只有这三者其中任意一个发生变化时(变化的一般只有参数值),

  浏览器才会再次向服务器发送请求!

  缓存测试:

  总共四次请求:

  文本框中没有值  http://localhost:8070/demo/getJson.do?operation=  请求发送至服务器

  文本框中没有值  http://localhost:8070/demo/getJson.do?operation=  没有发送请求,使用的缓存

  文本框的值为1    http://localhost:8070/demo/getJson.do?operation=1   请求发送至服务器

  文本框的值为1    http://localhost:8070/demo/getJson.do?operation=1   没有发送请求,使用的缓存

2.解决方案

  方式一:设置ajax禁用缓存

  $.get();$.getJSON();$.post();  这三者需要在发送请求之前,需要添加设置:$.ajaxSetup({"cache" : false});

  说明:这个参数设置必须放在ajax请求前,否则不生效;另外,$.ajaxSetup("cache",false);这种声明方式是错误的。

  $.ajax({type:"post",url:"",data:{},onsucess:function(result){}});  既可以添加参数:,cache:false,也可以像上面一样添加设置。

  ajax禁用缓存是怎么实现的?

  在请求后面追加参数:_=timestamp

  证实:

  请求没有传参的情况会自动添加_=系统时间戳

  后台输出

  请求传参的情况会自动在其后追加&_=系统时间戳

  chrome下测试,亦是如此!

  方式二:添加请求参数

  由上可知,ajax禁用缓存的实质,其实还是追加一个参数"_",参数值是动态的。

  因此,我们可以自己定义参数名称(有意义的名字:见名知义)及动态值。

  举例:&timestamp=new Date().getTime();  

3.小结

  使用方式一,传到后台的参数会多出一个"_",需要注意!

  使用方式二,可以自己定义参数名称。

  对于要不要使用缓存,要正确地对待:开发时,可以禁用缓存;正式使用时,建议使用缓存。

4.扩展

  在开发时,需要经常调试页面,对于js的缓存还是挺烦人的,可以在引用的js文件后面追加参数的方式来避免缓存问题哦!

相关推荐:

 

ajax 缓存问题及解决方案的更多相关文章

  1. 对jquery的ajax进行二次封装以及ajax缓存代理组件:AjaxCache

    虽然jquery的较新的api已经很好用了, 但是在实际工作还是有做二次封装的必要,好处有:1,二次封装后的API更加简洁,更符合个人的使用习惯:2,可以对ajax操作做一些统一处理,比如追加随机数或 ...

  2. IE8 ajax缓存问题

    娘希匹,又遇到缓存问题了. 下面的代码,在其他浏览器都是正常的,但是在IE8中出现诡异问题. $.ajax({ url:dataUrl, data:encodeURI(currentjsonform) ...

  3. Ajax缓存解决办法(转载)

    项目有时要用一些Ajax的效果,因为比较简单,也就没有去用什么Ajax.NET之类的东西,手写代码也就实现了.. 第二天,有人向我报告错误:说是只有第一次读取的值正常,后面的值都不正常:我调试了一下 ...

  4. IE浏览器下ajax缓存导致数据不更新的解决方法

    摘自:http://www.iefans.net/ie-ajax-json-shuju-huancun/ 最近做设计的时候遇到一个小问题,当你用jquery的getjson函数从后台获取数据的时候,I ...

  5. jquery是如何清除ajax缓存的

    大家都知道万恶的IE在ajax中往往只读取第一次ajax请求时候的数据,其余时候都是从cache提取数据,(太懒了T_T).原生的JS清除ajax缓存的方法多,但是终觉有点繁琐,如果是用jquery的 ...

  6. 清除IE中Ajax缓存,Chrome不需要

    做项目的时候,会遇到这种情况,通过ajax从后台获取的数据在chrome上显示的是最新的,而在IE上却是以前的数据,这是为什么呢,在我百般调试下终于发现原来是因为IE的ajax缓存的原因,于是加上这段 ...

  7. IE浏览器Ajax缓存问题小结

    IE浏览器Ajax缓存问题 在IE下使用ajax的get方法向后台请求数据时,如果请求URL与之前完全一样,则根本不想后台获取,直接返回上一次请求缓存的数据(在缓存过期之前,针对相同地址发起的多个Aj ...

  8. Redis缓存穿透和缓存雪崩以及解决方案

    Redis缓存穿透和缓存雪崩以及解决方案 Redis缓存穿透和缓存雪崩以及解决方案缓存穿透解决方案布隆过滤缓存空对象比较缓存雪崩解决方案保证缓存层服务高可用性依赖隔离组件为后端限流并降级数据预热缓存并 ...

  9. AJAX缓存清理

    Ajax页面缓存是ajax处理数据时对一些重复相同数据进行一个缓存操作,这样从另一个层面对于我们来讲是非常的不错了,但有时我们并不希望它缓存要如何处理呢?下面我们一起来看看关于页面缓存问题分析与解决, ...

随机推荐

  1. Velocity模板学习(一)

    一.Velocity是什么 Velocity是一个基于Java的模板引擎,允许任何人仅仅简单地使用模板语言就可以引用由Java代码编写的对象. 二.Velocity的基本语法 1.变量 变量的定义 在 ...

  2. mysql group by 组内排序

    有数据表 comments------------------------------------------------| id | newsID | comment | theTime |---- ...

  3. VS2010安装HTML5插件

    步骤: 1. 下载 插件 2.拷贝文件里面德尔html_5.xsd到 D:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Packa ...

  4. 关于jQuery中的 offset() 和 position() 的用法

    ---恢复内容开始--- 在jQuery中有两个获取元素位置的方法offset()和position().position()方法是在1.2.6版本之后加入的,为什么要引入这个方法呢?这两个方法之间有 ...

  5. std::string compare

    #include <iostream> #define NULL 0 #define MAX_LIMIT 5 //#define MAX_LENGTH 2 bool ComparePC2S ...

  6. word2010图片仅仅显示边框

    有两个可能的原因: 1.图片所在段落的行间距被设置成固定值了 解决:选择所在段落,右键选择段落--弹出[段落]设置对话框--把固定行距改为"单倍行距"或其它--确定. 2.显示设置 ...

  7. andriod 下一个页面

    @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); s ...

  8. android RecyclerView (三):ItemAnimator 详解

    本文继上篇 ItemDecoration 之后,是深入理解 RecyclerView 系列的第二篇,关注于 ItemAnimator,主要是分析 RecyclerView Animators 这个库的 ...

  9. easyui select 下拉框的取值和赋值

    1.取值 //拍卖管理中示例 function serializeForm(form) { var obj = { auclotType : $('#auclotType').val(), goods ...

  10. mvn sonar:sonar在jenkins步骤的执行位置影响执行结果

    1.如图所示,sonar执行可以在build中执行,也可以在步骤Post Steps中执行(mvn sonar:sonar) 2.但是在步骤Post Steps中执行的话,有一个问题,就是假如项目有多 ...