美文网首页
ajax中304缓存处理

ajax中304缓存处理

作者: 团子Secret | 来源:发表于2018-04-13 14:38 被阅读0次

这是废话....

【写的可能不专业,但是我会加油的,ヾ(◍°∇°◍)ノ゙ 】
与后台的交互用的是axios,从来也没有考虑过缓存的事情,这次后台提出了一个需求,get请求的请求头加上If-Modified-Since,然后就去查文档(原谅小白没经验)。发现在ajax中有一个ifModified属性为true的时候可以实现。而axios里并没有相对应的属性支持(orz也可能是我没找到)

了解ifModified

ifModified (Boolean) : (默认: false) 仅在服务器数据改变时获取新数据。使用 HTTP 包 Last-Modified 头信息判断。

ifModified的定义可知,当ifModified设为true时,请求头会加上If-Modified-Since, If-Modified-Since是标准的http请求头标签,在发送http请求时,把浏览器端缓存页面的最后修改时间一起发到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行比较。
如果时间一致,那么返回http状态码304(不返回文件内容)
如果时间不一致,就返回http状态码200和新的文件内容,客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示到浏览器中。

实现

function getAjax(url, sendData, state = true) {
    return new Promise((resolve, reject) => {
        $.ajax({
            url: url,
            data: sendData,
            type: 'get',
            dataType: 'json',
            cache: !state, //是否使用浏览器的缓存数据
            ifModified: state,//是否向服务器询问数据更新情况
            success(data, des, status) {
                if (status.status === 200) {
                    if (data.code === 200) {
                        return resolve(data.data);
                    } else {
                        return reject({code: data.code, message: data.message});
                    }
                }
                if (status.status === 304) {
                    getAjax(url, sendData, false)
                    .then(data => {
                        resolve(data);
                    })
                    .catch(data => {
                        reject(data);
                    });
                }
            }, error() {
                return reject({code: 503, message: '数据无法加载,请刷新重试!'});
            }
        });
    });
}

解析

  • getAjax中传入3个参数,url接口地址,sendData 传输的数据,state状态值【代表ifModified的状态】;
  • 首先向后台询问数据是否更新,ifModified的状态为true,不使用浏览器的缓存数据,cachefalse
  • http状态码返回200时,说明数据更新了,直接使用服务器传输过来的新数据;
  • http状态码返回304时,说明数据没有发生改变,服务器不返回新数据,则向浏览器缓存请求数据,此时cachetrueifModified的状态为false,不需要询问服务器数据是否更新。

相关文章

  • ajax中304缓存处理

    这是废话.... 【写的可能不专业,但是我会加油的,ヾ(◍°∇°◍)ノ゙ 】与后台的交互用的是axios,从来也没...

  • 浏览器缓存

    浏览器缓存 浏览器处理网页的方式 走到协商缓存会返回 304 走到强缓存会返回 200 合理使用浏览器缓存 页面连...

  • 开发中遇到的问题集结

    问题1:AFNetwork数据没有更新回调 statuCode(304)问题 最近在做项目中缓存的问题以及错误处理...

  • jquery使用(一):ajax

    一、ajax基本参数配置 二、ajax数据缓存优化 1.$.ajax不缓存版: 要解决:清除缓存,可以有三种解决方...

  • HTML面试题(一)

    一、什么时候返回304状态码?谈谈H5缓存机制(浏览器缓存机制)。 Q1:304状态码,Not Modified。...

  • face14ajax基础内容

    ajax基础内容 ajax技术利用了 什么协议?简述ajax的工作机制 写出jquery中,可以处理ajax的几种...

  • ajax报错304

    是一个小伙伴的报错能看到后台传来的数据 但是他走的是error 这里的304代表有缓存 在后面拼接一个随机数或...

  • http 缓存

    4种缓存方式 HTTP缓存控制参考 分类和区别 强缓存: 规定了过期时间 协商缓存: 需进行比较,会返回304状态...

  • http状态码的含义:200 204 301 304 403 4

    200:OK,服务器成功处理了请求 301:重定向,请求的URL已移走 304:未修改,客户端的缓存资源是最新的 ...

  • 浏览器

    浏览器 缓存强缓存:也称为本地缓存,不向服务器发送请求,直接使用客户端本地缓存数据;协商缓存:也称为304缓存,向...

网友评论

      本文标题:ajax中304缓存处理

      本文链接:https://www.haomeiwen.com/subject/imlckftx.html