Ajax:(async javascript and xml)

四步创建

function getRequest() {return new Promise((resolve, reject) => {// 1.const xhr = new XMLHttpRequest();/**2.xhr.open([http method], [url], [async], [userName], [userPass])http methods 有常用的请求方式有:post,get,delete,put,head,options,trace,connect。url:是想服务器请求的 api。async:代表异步,默认是 true 异步,false 是同步。userName、userPass:代表用户名和密码7 */xhr.open('GET', url, false);xhr.setRequestHeader("Content-Type", "application/json");xhr.onreadystatechange = function () {/**3.Ajax 状态一共有 5 种 xhr.readyState,分别是 0, 1, 2, 3, 4状态 0:unsent,刚创建的 XMLHttpRequest 实例,还没有发送。状态 1:(载入)已调用 send() 方法,正在发送请求。状态 2:(载入完成)send() 方法执行完成,已经接收到全部响应内容状态 3:loading(交互)正在解析响应内容状态 4:done 表示响应的主体内容解析完成,可以在客户端调用了 */if (xhr.readyState !== 4) return;if (xhr.status === 200 || xhr.status === 304) {resolve(xhr.responseText);} else {reject(new Error(xhr.responseText));}};// 4.xhr.send();});
}

缓存问题

  1. 设置请求头,在 ajax 发送请求前加上 anyAjaxObj.setRequestHeader(“If-Modified-Since”,“0”) 或 anyAjaxObj.setRequestHeader(“Cache-Control”,“no-cache”)。
  2. 在 URL 后面加上一个随机数:“fresh=” + Math.random()。 或在后面加上时间戳:“nowtTime=” + new Date().getTime()。
    如果是使用 jQuery,直接这样就可以了
  3. $.ajaxSetup({cache:false})。这样页面的所有 ajax 都会执行这条语句就是不需要保存缓存记录

Fetch

// get请求
const pro1 = fetch('https://xxx')
pro1.then( response => response.json()
).catch( err => {console.log(err)
})
// post请求
const URL =  'https://xxx'
const init = {method: 'POST',header: {"Content-type": "application/x-www-form-urlencoded; charset=UTF-8",},data: 'id=12&name=小新',credentials: 'include'
}
const pro2 = fetch(URL, init)
pro2.then( response => response.json()
).catch( err => {console.log(err)
})

返回promise对象 + 原生js: 不使用回调
三个模块:request对象,headers对象,response对象
数据流:通过数据流(Stream 对象)处理数据,对于请求大文件或者网速慢的场景相当有用
使用 fetch(url,optionObj)
optionObj:method,headers,data
credentials 表示是否可以携带 cookie,includes 表示是否同源都包含 cookie
异步,
post请求:跨域,先Options,204后发送真正请求
与ajax区别:
没有使用数据流,所有的请求都必须完成后才拿到

Axios:

axios.interceptors.request.use(function(config){return config;
},function(error){return Promise.reject(error);
});axios.interceptors.response.use(function(){return response;
},function(error){return Promise.reject(error);
})axios.get('api',{param:{}
}).then(res=>console.log(res));
axios.delete('apiURL', {params: {id: 1},timeout: 1000
})
axios.post('apiURL',{user: '小新',age: 18
}).then( res => {console.log(res);
})axios.put('apiURL', {name: '小新',
})axios.patch('apiURL', {id: 13,
},{timeout: 1000,
})// axios.all(Arr).then() => axios.all = function(arr){ return Promise.all(arr)}

promise封装的XmlHttpRequest的方法
原理
axios对象:通过createInstance创建
方法:调用Axios.prototype.request
生成axios.interceptors.request拦截器
拦截器的作用:在请求发送前进行一些而操作,比如加上token
响应拦截器 axios.interceptors.response
在接收到响应后进行一些操作
特点
是基于promise的http库,支持promise所有的API
拦截请求和响应
转换请求和响应数据,并将响应内容自动转换为JSON类型的数据
安全性更高,客户端支持防御XSRF
常用方法:get,post,put,patch,delete
配置: url,method,baseURL,transformRequest,headers,params,auth,proxy

Fetch VS Ajax VS Axios 区别

传统的 ajax 利用的是 XMLHttpRequest 这个对象,和后端进行交互。JQuery ajax 是对原生 XHR 的封装,多请求间有嵌套的话就会出现回调地狱的问题。
axios 使用 promise 封装 xhr,解决了回调地狱问题
fetch 是原生的 js,使用的是 promise,比ajax方便异步,没有回调地狱的问题

Ajax,Axios,Fetch的学习,对比和使用相关推荐

  1. vue-d2admin-axios异步请求登录,先对比一下Jquery ajax, Axios, Fetch区别

    先说一下对比吧 Jquery ajax, Axios, Fetch区别之我见 引言 前端技术真是一个发展飞快的领域,我三年前入职的时候只有原生XHR和Jquery ajax,我们还曾被JQuery 1 ...

  2. Jquery ajax, Axios, Fetch区别

    https://segmentfault.com/a/1190000012836882 引言 前端技术真是一个发展飞快的领域,我三年前入职的时候只有原生XHR和Jquery ajax,我们还曾被JQu ...

  3. Jquery ajax, Axios, Fetch区别之我见(转载)

    来源:https://segmentfault.com/a/1190000012836882 引言 前端技术真是一个发展飞快的领域,我三年前入职的时候只有原生XHR和Jquery ajax,我们还曾被 ...

  4. Jquery ajax, Axios, Fetch区别之我见 https://segmentfault.com/a/1190000012836882

    前端技术真是一个发展飞快的领域,我三年前入职的时候只有原生XHR和Jquery ajax,我们还曾被JQuery 1.9版本版本以下不支持大文件请求这个问题卡了半天(最后自己写了原生的XHR请求).一 ...

  5. Jquery ajax, Axios, Fetch区别之我见 Axios中文说明

    引言 此小段转自 https://segmentfault.com/a/1190000012836882 前端技术真是一个发展飞快的领域,我三年前入职的时候只有原生XHR和Jquery ajax,我们 ...

  6. 理解 ajax、fetch和axios

    背景 ajax fetch.axios 优缺点 ajax基于jquery,引入时需要引入庞大的jquery库,不符合当下前端框架,于是fetch替代了ajax 由于fetch是比较底层,需要我们再次封 ...

  7. [vue] ajax、fetch、axios这三都有什么区别?

    [vue] ajax.fetch.axios这三都有什么区别? ajax, 实际上就是xmlHttpRequest, 旧瓶装新酒的一种新应用的称呼 fetch是新出的规范, 具体实现原理不太清楚, 但 ...

  8. 苹果手机 ajax不兼容,技术回顾:浏览器兼容性 axios+fetch+ajax

    css盒: box-sizing:content-box;表示标准的盒子模型 box-sizing:border-box表示的是IE盒子模型 box-sizing:padding-box,这个属性值的 ...

  9. Ajax,jQuery ajax,axios和fetch的区别

    Ajax,jQuery ajax,axios和fetch的区别 Ajax: Ajax 即"Asynchronous Javascript And XML"(异步 JavaScrip ...

最新文章

  1. grafana模板_EMQ X + InfluxDB + Grafana:物联网数据监控可视化方案
  2. python counter函数定义_分享几个自己常用的Python高级函数
  3. C#如何获得当前程序所在的目录
  4. MySQL删除外键约束
  5. php判断单向链表中有没有环,python判断链表是否有环的实例代码
  6. 从系统设计到市场痛点,浅谈英国自助结账系统
  7. python 获取内存使用率_Python获取CPU使用率、内存使用率、网络使用状态 | 学步园...
  8. mysql替换json的key_mysql中json_replace函数的使用?通过json_replace对json对象的值进行替换...
  9. 《中国人工智能学会通讯》——11.28 统一先验建模框架 II:整数规划
  10. 2019年12月中国编程语言排行和薪资分析
  11. Java虚拟机 --- 内存区域
  12. PDF转EPUB格式电子书经验总结
  13. WSO2 XMl转JSON
  14. 【ZT】iSpring Free Cam – 免费易用的「录制屏幕」工具 [Windows]
  15. 如何使用vue开发公众号网页
  16. 信用报告谁在查?为啥查?
  17. Android笔记之天气预报接口
  18. CocosCreator之微信小游戏的抽奖转盘
  19. Android 破解APK
  20. CentOS 5.3 安裝 SquirrelMail

热门文章

  1. ScrollPic.js——图片左右滚动插件(单一功能)
  2. 欧洲6G时间表、目标和关键技术(下篇)
  3. sumo路由文件(.rou.xml文件)的生成以及关于生成交通流的一些方法
  4. Python安装Tensorflow因为版本低而出现的错误提示conda activate tensorflow-cpu Could not find conda environment: tenso
  5. 产品经理之转载马化腾:改掉这七点,让产品自己说话_36氪
  6. 狂赚310亿美元!安卓系统的钱究竟是怎么来的--转自网友文章160303
  7. 计算机文档软件,电脑文档软件
  8. PHP毕业设计——许愿墙升级版(有源码)
  9. 姐姐担忧闪婚妹妹被骗强迫迎其乱精力病
  10. 研究生、本科生Java开发、后台、软件工程师秋招春招经验