首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【总结】2020- 前端常用的几种请求方式

优点: 广泛的浏览器支持:尽管现代浏览器更推荐使用 Fetch API,但 XMLHttpRequest 仍然得到了几乎所有浏览器的支持,包括一些较旧的版本。...缺点: 默认不携带 Cookie:Fetch API 在默认情况下不会发送同源的 Cookie,这可能导致一些基于 Cookie 的认证机制出现问题。...上传进度监控:Fetch API 不提供上传进度的监控,而 XMLHttpRequest 支持。 最佳使用场景:现代浏览器中,需要简洁语法和链式调用的场景。...拦截器支持:Axios 允许你添加请求和响应拦截器,这些拦截器可以在请求发送之前或响应到达之前进行自定义处理。...转换请求数据和响应数据:Axios 允许你在请求发送之前转换请求数据(transformRequest)和在响应到达之前转换响应数据(transformResponse)。

39710

如何防止重复发送ajax请求

发送请求前先判断这个api请求之前是否已经有还在pending的同类,即是否存在上述数组中,如果存在,则不发送请求,不存在就正常发送并且将该api添加到数组中。等请求完结后删除数组中的这个api。...发送请求时判断这个api请求之前是否已经有还在pending的同类,即是否存在上述数组中,如果存在,则找到数组中pending状态的请求并取消,不存在就将该api添加到数组中。...对象,发送ajax请求,在这之后如果执行cancel函数将cancelToken.promise状态resolve掉,就会调用request.abort(),可以用来请求取消 解耦 剩下要做的就是将cancelToken...如果存在,则删除数组中的这个api并且执行数组中在pending的ajax请求的cancel函数进行请求取消,然后就正常发送第二次的ajax请求并且将该api添加到数组中。...如果存在,则执行自身的cancel函数进行请求拦截,不重复发送请求,不存在就正常发送并且将该api添加到数组中。

2.5K11
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    目前5种最流行的发送HTTP请求的方法

    下面是如何发送GET请求和使用XMLHttpRequest API从远程API异步检索数据: //create XMLHttpRequest object const xhr = new XMLHttpRequest...在XMLHttpRequest上提供额外的特性,例如将请求和响应对象与本机缓存API集成,并发送无cors请求。...它在底层与原生XMLHttpRequest API一起工作,为解决诸如拦截HTTP请求和同时发送请求等独特问题带来了一组方便和通用的特性。与Fetch类似,它支持处理异步请求的承诺。...这些插件添加到SuperAgent的一些特性示例包括模拟HTTP调用、缓存请求和响应数据、排队和调整请求等。 兼容所有主流浏览器版本。然而,你必须使用polyfill为较早版本的IE浏览器启用功能。...通过支持请求超时、重试和监控进度等特性,解决了本机Fetch API中的一些限制。

    3.2K20

    搞明白axios 源码,探究配置、拦截器、适配器等核心功能具体的执行过程(二)

    这篇我们主要讲解一下 axios 中的 配置、拦截器和执行链等一些核心的功能到底是怎么运行的。...02 配置过程 要了解这个之前,我们先来看一下 axios 在使用的时候一种方式: axios.create({ ...配置项 }) 不知道大家有没有使用过种方式,这种方式可以让我们传递一些配置到 axios...优先级依次是:某个具体请求配置 > 创建实例对象配置 > axios 默认配置 03 请求过程 上节说过,axios可以像对象那样调用属性方法,如 get、post等,其实最终都会调用 request...,那么接下来我们继续看一下到底是怎么发送的请求。...04 具体请求 从上面我们可以看到axios发送的请求就是一个链的执行过程,除去 request 和 response的拦截器不说,我们重点说一下:dispatchRequest 这个方法的执行过程,

    1.2K10

    脚本化HTTP 取得响应 指定请求

    其他 一些更多的通信协议,包括rpc(远程过程调用)允许运行于一台计算机的程序调用另一台计算机程序的子程序。如果面向对象编程,则远程过程调用为远程调用,远程方法调用。...好贵,建议注册一下 XMLHttpRequest 浏览器在CMLHttpRequest类上定义了其HTTP 的API 这个类的每个实例都表示一个独立请求/响应对。...同java类似,使用这个api的第一件事实例化XMLHttpRequest对象 ps:能重用已存在的XMLHttpRequest 但是之前的对象将会被挂起 HTTP请求的4个部分 http请求方法或者动作...跨域请求被拦截。...由于不是同源,同源被拦截 是同源的 // 编写请求头GET并完成发送 var request = new XMLHttpRequest(); // 设置请求的类 request.open('GET',

    1.4K40

    axios基础使用

    then 和 catch: then:请求执行成功时调用 catch:请求失败时调用 // 执行请求返回 Promise 对象 var ajax = axios.get('https://api.myjson.com...console.log( res.request ) // 原生 XMLHttpRequest 对象 }).catch((err)=>{ // 发送了请求,并且成功,但服务器返回状态码不是...); console.log(error.response.headers); } // 发送了请求,但服务器没有返回响应时执行 else if (error.request...) { // error.request 是原生的 XMLHttpRequest 对象 console.log(error.request); } // 发送请求时出错...上传文件时处理上传进程的回调函数 onDownloadProgress 下载时处理下载进度的回调函数 拦截器 在发送 AJAX请求前和处理AJAX响应前对数据进行拦截处理 // 在所有请求之前执行的代码

    40010

    面试官:Vue项目中有封装过axios吗?怎么封装的?

    一、axios是什么 axios 是一个轻量的 HTTP客户端 基于 XMLHttpRequest 服务来执行 HTTP 请求,支持丰富的配置,支持 Promise,支持浏览器端和 Node.js 端...,res2第二个请求返回的内容 // 两个请求都执行完成才会执行 })); 二、为什么要封装 axios 的 API 很友好,你完全可以很轻松地在项目中直接使用。...设置接口请求前缀:根据开发、测试、生产环境的不同,前缀需要加以区分 请求头 : 来实现一些具体的业务,必须携带一些参数才可以请求(例如:会员业务) 状态码: 根据接口返回的不同status , 来执行不同的业务...(res) }) 这样可以把api统一管理起来,以后维护修改只需要在api.js文件操作即可 请求拦截器 请求拦截器可以在每个请求里加上token,做了统一处理后维护起来也方便 // 请求拦截器 axios.interceptors.request.use...( config => { // 每次发送请求之前判断是否存在token // 如果存在,则统一在http请求的header都加上token,这样后台根据token判断你的登录情况,

    2K21

    ahooks 是怎么解决用户多次提交问题?

    axios 自动取消重复请求 axios 取消请求 对于原生的 XMLHttpRequest 对象发起的 HTTP 请求,可以调用 XMLHttpRequest 对象的 abort 方法。...它其实底层也是用的 XMLHttpRequest 对象,它对外暴露取消请求的 API 是 CancelToken。...答案是通过 axios 的拦截器。 请求拦截器:该类拦截器的作用是在请求发送前统一执行某些操作,比如在请求头中添加 token 相关的字段。...这种其实就只需要根据 URL 和请求方法判定其为重复请求,然后取消之前的请求就可以了。 这里我认为,如果有需要的话,可以暴露一个 API 给开发者进行自定义重复的规则。...通过 axios 拦截器以及其 CancelToken 功能,我们能够在拦截器中自动将已发的请求取消,当然假如有一些接口就是需要重复发送请求,可以考虑加一下白名单功能,让请求不进行取消。

    1.9K10

    HTTP实用指南 - 笔记

    - 沿着到目标资源的路径执行一个消息环回测试 PATCH - 用于对资源的部分修改 方法分类: 安全的:(不会修改服务器数据) GET HEAD OPTIONS 幂等的:(同样的请求多次执行效果相同...(只会精确到端口),Origin 比 Referer 更尊重隐私 User-Agent 用户客户端(浏览器标识)的一些必要信息,如 UA 头部等 # 常用响应头 Content-Type 服务端返回的实体内容的类型...id=xxx') // 发送请求到后端(服务器) xhr.send() // 当请求被发送到服务器时,我们需要执行一些基于响应的任务。...Axios示例 >folded // 全局配置 axios.defaults.baseURL = "https://api.example.com"; // 添加请求拦截器 axios.interceptors.request.use...(function (config) { // 在发送请求之前做些什么 return config; }, function (error) { // 对请求错误做些什么

    84720

    学学axios

    axios基于promise的HTTP库,能设置请求和相应拦截,可以处理请求和响应数据,内部好像还支持防御CSRF跨站请求伪造攻击,浏览器和nodejs都可以使用,使用方法的API就不多说介绍了,可以去看看文档...一般我们用的是默认的,axios允许自定义,提供了adapter参数: // `adapter` 允许自定义处理请求,以使测试更轻松 // 返回一个 promise 并应用一个有效的响应 (查阅 [...,其实就是发起请求之前和拿到响应之后的处理,如果我们自己写一个XMLHttpRequest,我们也很容易处理,只不过我们用起来有点类似发布订阅,先看看两个方法,相当于注册了: this.interceptors...interceptor.rejected); }); while (chain.length) { promise = promise.then(chain.shift(), chain.shift()); } 循环数组调用之前注册的请求拦截和响应拦截...至于其他的api,其实都是XMLHttpRequest内部支持的,比如: 设置超时:XMLHttpRequest.timeout 设置header:XMLHttpRequest.setRequestHeader

    1K10

    二十.接口调用

    接口调用方式 原生ajax 基于jQuery的ajax fetch axios async 和 await 异步 JavaScript的执行环境是「单线程」 所谓单线程,是指JS引擎中负责解释和执行JavaScript...这个任务可称为主线程 异步模式可以一起执行多个任务 JS中常见的异步调用 定时任何 ajax 事件函数 promise 主要解决异步深层嵌套的问题 promise 提供了简洁的API 使得异步操作更加容易...请求拦截器 请求拦截器的作用是在请求发送前进行一些操作 例如在每个请求体里加上token,统一做了处理如果以后要改也非常容易 响应拦截器 响应拦截器的作用是在接收到响应后进行一些操作 例如在服务器返回登录状态失效...任何请求都会经过这一步 在发送请求之前做些什么 config.headers.mytoken = 'nihao'; # 1.2 这里一定要return 否则配置不成功...this.id = ''; this.name = ''; }, } 3 验证图书名称是否存在 添加图书之前发送请求验证图示是否已经存在

    6.7K10

    前端成神之路-vue04

    接口调用方式 原生ajax 基于jQuery的ajax fetch axios 异步 JavaScript的执行环境是「单线程」 所谓单线程,是指JS引擎中负责解释和执行JavaScript代码的线程只有一个...这个任务可称为主线程 异步模式可以一起执行多个任务 JS中常见的异步调用 定时任何 ajax 事件函数 promise 主要解决异步深层嵌套的问题 promise 提供了简洁的API 使得异步操作更加容易...请求拦截器 请求拦截器的作用是在请求发送前进行一些操作 例如在每个请求体里加上token,统一做了处理如果以后要改也非常容易 响应拦截器 响应拦截器的作用是在接收到响应后进行一些操作...任何请求都会经过这一步 在发送请求之前做些什么 config.headers.mytoken = 'nihao'; # 1.2 这里一定要return 否则配置不成功...清空表单 this.id = ''; this.name = ''; }, } 3 验证图书名称是否存在 添加图书之前发送请求验证图示是否已经存在

    3.7K10

    前端三大框架之Vue-day04

    接口调用方式 原生ajax 基于jQuery的ajax fetch axios 异步 JavaScript的执行环境是「单线程」 所谓单线程,是指JS引擎中负责解释和执行JavaScript代码的线程只有一个...这个任务可称为主线程 异步模式可以一起执行多个任务 JS中常见的异步调用 定时任何 ajax 事件函数 promise 主要解决异步深层嵌套的问题 promise 提供了简洁的API 使得异步操作更加容易...请求拦截器 请求拦截器的作用是在请求发送前进行一些操作 例如在每个请求体里加上token,统一做了处理如果以后要改也非常容易 响应拦截器 响应拦截器的作用是在接收到响应后进行一些操作...任何请求都会经过这一步 在发送请求之前做些什么 config.headers.mytoken = 'nihao'; # 1.2 这里一定要return 否则配置不成功...清空表单 this.id = ''; this.name = ''; }, } 3 验证图书名称是否存在 添加图书之前发送请求验证图示是否已经存在

    3.2K20

    77.9K 的 Axios 项目有哪些值得借鉴的地方

    所以 Axios 提供了请求拦截器和响应拦截器来分别处理请求和响应,它们的作用如下: 请求拦截器:该类拦截器的作用是在请求发送前统一执行某些操作,比如在请求头中添加 token 字段。...在看具体的代码之前,我们先来分析一下它的设计思路。Axios 的作用是用于发送 HTTP 请求,而请求拦截器和响应拦截器的本质都是一个实现特定功能的函数。...三、HTTP 适配器的设计与实现 3.1 默认 HTTP 适配器 Axios 同时支持浏览器和 Node.js 环境,对于浏览器环境来说,我们可以通过 XMLHttpRequest 或 fetch API...比如当调用自定义适配器之后,需要返回 Promise 对象。这是因为 Axios 内部是通过 Promise 链式调用来完成请求调度,不清楚的小伙伴可以重新阅读 “拦截器的设计与实现” 部分的内容。...跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。

    1.3K31

    揭开 JavaScript 事件循环的神秘面纱

    Javascript 是一种单线程语言,这意味着它一次只能执行一个任务。但是,它仍然设法同时执行多项任务。它通过使用一些复杂的数据结构给人一种多线程的错觉。...为了更好地理解事件循环,让我们列出用于执行异步代码的组件 - 调用堆栈:JavaScript 使用调用堆栈来跟踪当前正在执行的函数(执行上下文)。...异步操作,例如计时器、用户事件和网络请求,由 Web API 处理。一旦这些操作完成,它们就会被放入任务队列中。 事件循环:事件循环不断检查两件事:调用堆栈和任务队列。...是的,Http 异步请求将由 Web API 处理XMLHttpRequest。它将被处理并发送到任务队列中。...通过掌握其内部工作原理以及调用堆栈、Web API、任务队列和事件循环等组件的作用,您可以自信地处理异步任务并构建高性能的 Web 应用程序。

    28940
    领券