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. 不思议迷宫:逆向后的放置play

    前言 前置准备 目标分析 逆向加密逻辑 定位sign与key 解密luac 反编译luajit的bytecode 开启上帝模式 前言     看了fatezero的<阴阳师:一个非酋的逆向旅程& ...

  2. DP经典 BZOJ 1584: [Usaco2009 Mar]Cleaning Up 打扫卫生

    BZOJ 1584: [Usaco2009 Mar]Cleaning Up 打扫卫生 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 419  Solve ...

  3. VK Cup 2016 - Round 1 (Div. 2 Edition) D. Bear and Polynomials

    D. Bear and Polynomials 题目连接: http://www.codeforces.com/contest/658/problem/D Description Limak is a ...

  4. Theme.AppCompat无全屏主题解决办法

    V7包中的Theme.AppCompat主题系列中并没有全屏样式,这个是为什么,只有作者知道…… 解决办法: 自定义主题 <style name="Theme.AppCompat.Li ...

  5. shell之if简化语句

    最常用的简化if语句: && 如果是“前面”,则“后面” [ -f /var/run/dhcpd.pid ] && rm /var/run/dhcpd.pid 检查 文 ...

  6. Unity3D协程介绍 以及 使用

    作者ChevyRay ,2013年9月28日,snaker7译  原文地址:http://unitypatterns.com/introduction-to-coroutines/ 在Unity中,协 ...

  7. jquery显示、隐藏div的方法

    $("#top_notice").css("display", "block");//第1种方法 //$("#top_notice ...

  8. JAVA常见算法题(三十一)---冒泡排序

    package com.jege.spring.boot.hello.world; /** * java算法之冒泡排序<br> * 将数组按照从大到小的顺序排列<br> * * ...

  9. 用10张图来看机器学习Machine learning in 10 pictures

    I find myself coming back to the same few pictures when explaining basic machine learning concepts. ...

  10. [转]Hamcrest使用方法实例

    assertThat方法需要使用hamcrest的匹配方法: 示例 assertThat( n, allOf( greaterThan(1), lessThan(15) ) ); assertThat ...