首页
学习
活动
专区
圈层
工具
发布

Ajax 之战:XMLHttpRequest 与 Fetch API

Ajax 是大多数 web 应用程序背后的核心技术,它允许页面向 web 服务发出异步请求,因此数据可以不经过页面往返服务器无刷新显示数据。...;XMLHttpRequest 对象的 readyState 属性则返回当前状态: 0 (uninitialized) - 请求未初始化 1(loading)- 服务器连接建立 2(loaded)- 请求收到...: 'default' —— 如果有一个新的 (未过期的) 匹配,则使用浏览器缓存;如果没有,浏览器会发出一个带条件的请求来检查资源是否已改变,并在必要时会发出新的请求 'no-store' —— 绕过浏览器缓存...loaded —— 到目前为止完成的工作或内容的数量 Fetch API 没有提供任何方法来监控上传进度。...catch() 块,这似乎是合乎逻辑的,但事实并非如此:Promise 成功地解决了这些响应,只有当网络没有响应或请求被中断时,才会发生拒绝。

3.1K20

解决前端常见问题:竞态条件

我们把相关的数据请求封装到了自定义 hook "useArticleLoading" 中,为了页面的使用体验,我们要么显示获取的数据,要么显示加载中。...我们管理了加载态以及数据请求 当我们 url 访问 /articles/1 时,会发出 get 请求获取对应 articleId 为 1 的文章内容 竞态条件出现场景 上面是我们非常常见的获取数据的方法...,但是让我们考虑以下情况(时间顺序): 访问 articles/1 查看第一个文章内容 浏览器开始请求后台服务器,获取文章 1 的内容 网络连接出现问题 articles/1 请求未响应,数据未渲染到页面中...不等待 articles/1 了,访问 articles/2 浏览器开始请求后台服务器,获取文章 2 的内容 网络连接没有问题 articles/2 请求立即响应了,数据渲染到页面中 articles...现在 bug 不会再出现了: 访问 articles/1 查看第一个文章内容 浏览器开始请求后台服务器,获取文章 1 的内容 网络连接出现问题 articles/1 请求未响应,数据未渲染到页面中 不等待

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

    年底前端面试题总结(下)

    TCP 协议在发送方维持了一个发送窗口,发送窗口以前的报文段是已经发送并确认了的报文段,发送窗口中包含了已经发送但 未确认的报文段和允许发送但还未发送的报文段,发送窗口以后的报文段是缓存中还不允许发送的报文段...掌握页面的加载过程网页加载流程当我们打开网址的时候,浏览器会从服务器中获取到 HTML 内容浏览器获取到 HTML 内容后,就开始从上到下解析 HTML 的元素元素内容会先被解析,此时浏览器还没开始渲染页面我们看到...递归查询指的是查询请求发出后,域名服务器代为向下一级域名服务器发出请求,最后向用户返回查询的最终结果。使用递归 查询,用户只需要发出一次查询请求。...迭代查询指的是查询请求后,域名服务器返回单次查询的结果。下一级的查询由用户自己请求。使用迭代查询,用户需要发出 多次的查询请求。...一般我们向本地 DNS 服务器发送请求的方式就是递归查询,因为我们只需要发出一次请求,然后本地 DNS 服务器返回给我 们最终的请求结果。

    75740

    PWA 入门

    , 所有可用的显示区域都被使用, 并且不显示状态栏; standalone 看起来像一个独立的应用程序,会显示状态栏; minimal-ui 该应用程序将看起来像一个独立的应用程序,但会有浏览器地址栏;...Cache 实例中有下面几个方法(这些方法的返回值全都是 promise): Cache.put(url, response) 同时抓取一个请求及其响应,并将其添加到给定的 cache 中; Cache.add...cache addAll 方法的参数是存放 url 数组,它会对这些 url 发起 get 请求,把请求到的数据存入 cache 中。...如果断网了,远端的数据就会请求失败,这个时候我们可以将请求转发到本地缓存中,本地缓存如果能用请求匹配到响应内容,我们就返回响应数据,这样页面就不再是空白了。...respondWith 函数相当于一个发射器,拦截到的请求,在 respondWith 中可以返回一个自定义的响应(这些响应都应是一个 promise)。

    2.2K21

    前端高频面试题(五)(附答案)

    安全层的主要职责就是对发起的HTTP请求的数据进行加密操作 和 对接收到的HTTP的内容进行解密操作。Node 中的 Event Loop 和浏览器中的有什么区别?...对浏览器内核的理解浏览器内核主要分成两部分:渲染引擎的职责就是渲染,即在浏览器窗口中显示所请求的内容。...注意:当 301、302、303 响应状态码返回时,几乎所有的浏览器都会把 POST 改成GET,并删除请求报文内的主体,之后请求会再次自动发送。...301、302 标准是禁止将 POST 方法变成 GET方法的,但实际大家都会这么做。(4)304 Not Modified浏览器缓存相关。...该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。304 状态码返回时,不包含任何响应的主体部分。304 虽然被划分在 3XX 类别中,但是和重定向没有关系。

    97221

    新零售实战 | 前端控制并发请求,API限流实现方案汇总

    1.2 防止资源竞争与数据错乱问题本质:多请求同时操作同一资源(如库存)时,若前端未控制请求顺序,可能引发数据不一致。案例:用户快速点击“抢购”按钮10次,前端未做防抖和并发控制,触发10次下单请求。...二、典型线上问题示例2.1 秒杀活动中的请求风暴场景:万人参与秒杀,用户频繁点击“立即购买”按钮。问题:前端未限制按钮点击频率,每秒生成数百请求,超出浏览器并发上限,请求排队导致界面卡死。...}-${JSON.stringify(config.params)}`; // 检测重复请求 if (pendingRequests.has(key)) { // 返回已存在的请求Promise...return pendingRequests.get(key); } // 发起新请求并缓存Promise const request = axios(config).finally(()...检查是否存在相同key的pending请求。若存在则返回已创建的Promise对象。若不存在则发起新请求并缓存Promise。 请求完成后自动清理缓存。

    39510

    2018年前端面试总结

    bug:包含了HTML5元素的显示设置、预格式化文字的font-size问题、在IE9中SVG的溢出、许多出现在各浏览器和操作系统中的与表单相关的bug。...203 (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。 204 (无内容) 服务器成功处理了请求,但没有返回任何内容。...205 (重置内容) 服务器成功处理了请求,但没有返回任何内容。 206 (部分内容) 服务器成功处理了部分 GET 请求。 3开头 (请求被重定向)表示要完成请求,需要进一步操作。...服务器返回此响应(对 GET 或 HEAD请求的响应)时,会自动将请求者转到新位置。 302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。...服务器必须在响应中包含有关冲突的信息。 410 (已删除) 如果请求的资源已永久删除,服务器就会返回此响应。 411 (需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。

    1.2K20

    前后端交互的弯弯绕绕

    ,Ajax能够让页面无刷新的请求数据;在旧浏览器页面在向服务器请求数据时,因为返回的是整个页面的数据,页面都会强制刷新一下,这对于用户来讲并不是很友好;我们只是需要修改页面的部分数据,但是从服务器端发送的却是整个页面的数据...对象执行收发数据的时候,它会经历五种状态://0 未初始化|未启动、1 启动,已经调用 open(),尚未调用 send();//2 发送状态,已经调用 send(),但尚未接收到响应、3 接收 已经接收到部分响应数据...在这个状态下,我们可以通过then()方法设置的回调函数来获取这个值;已拒绝(rejected):如果异步操作失败,或者在执行过程中抛出了一个错误,Promise对象就会变为拒绝状态 在这个状态下...链式解决回调地狱:概念:依靠 then() 方法会返回一个新生成的 Promise 对象特性,继续串联下一环任务,直到结束细节:then() 回调函数中的返回值,会影响新生成的 Promise 对象最终状态和结果每个...Promise 对象中管理一个异步任务,用 then 返回 Promise 对象,串联起来好处:通过链式调用,解决回调函数嵌套问题/*** 目标:把回调函数嵌套代码,改成Promise链式调用结构*

    1.6K20

    前端知识点HTTPECMAScrip

    201 Created 表示请求成功并且服务器创建了新的资源 202 Accepted 表示服务器已经接受请求,但尚未处理 301 Moved Permanently 表示请求的网页已永久移动到新位置...8.HTTP中有哪些请求方式 GET,请求访问已经被uri,统一资源标识符识别的资源,可以通过url,给服务器传递参数数据 POST,传输信息给服务器,主要功能与GET方法类似,但传递的数据量通常不受限制...PUT,传输文件,报文主体中包含文件内容,保存到对应的URI位置。 HEAD,获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效。...在http1.1中,引入了连续连接的概念,通过这种连接,浏览器可以在建立一个连接之后,发送请求并得到返回信息,然后继续发送请求再次等到返回信息。...304是HTTP状态码,服务器用它来标识这个文件没有修改,不返回内容,浏览器在接收到个状态码后,会使用浏览器已缓存的文件。

    61111

    Fetch vs Axios

    快速概览 Fetch API是一个接口,暴露了一个叫做fetch()的方法,用于发出网络请求。它内置于现代浏览器中,因此不需要安装。它也可以作为node.js的一个实验性功能使用。...Axios可以运行在浏览器或者node.js环境中。 Fetch和Axios都是基于promise的HTTP客户端。...这意味着当我们使用它们来创建网络请求时,它们会返回一个resolve或者reject的promise。...基于此,具体语法如下: 如果没有指定配置项,会默认发出GET请求: fetch(url) 如果指定配置项,我们可以为请求定义一些自定义设置,包括: fetch(url, { method: 'GET...error对象上的request属性表示发出了一个请求,但客户端没有收到响应。否则,如果没有response 或request 属性,则表示在设置网络请求时发生错误。

    2K10

    探索Promise的高级应用:8个技巧大揭秘

    但实际上,Promise 有很多巧妙的高级用法,并且一些高级用法在 alova 请求策略库内部也被广泛使用。 现在,我将与大家分享8个高级使用技巧。希望这些技巧能够对你有所帮助,现在,我们就开始吧。...承诺实施请求共享 当一个请求已经发出但尚未得到响应时,再次发出相同的请求,就会造成请求的浪费。 此时,我们可以将第一个请求的响应与第二个请求共享。...当请求发生错误时,会触发 Promise 的 then 的第二个回调函数和 catch。 乍一看没有区别,但实际上前者无法捕获then当前第一个回调函数中抛出的错误,但catch可以。...接下来我们分析一下 注:以下内容对新手不友好,请谨慎阅读。 首先先保存中间件函数,在listen函数中收到请求后调用洋葱模型执行。...总结 以上就是我今天想与你分享的8个关于Promise的高级用途的全部内容,如果你觉得有用的话,请记得点赞我,关注我,并将这个内容分享给你的小伙伴们,也许能够帮助到他。

    49110

    2025最新出炉--前端面试题六

    动态渲染(Dynamic Rendering):根据 User-Agent 返回不同内容(对爬虫返回预渲染 HTML)。 使用无头浏览器:如 Puppeteer 在构建时生成静态页面。 4....Promise 新增的 allSettled 和 all 之间有什么区别 回答: Promise.all: 所有 Promise 成功时返回结果数组;任一失败立即 reject。...Promise.allSettled: 等待所有 Promise 完成(无论成功或失败),返回结果数组,包含每个 Promise 的状态和值。...JSONP:利用 标签跨域请求(仅支持 GET)。 代理服务器:前端开发服务器代理请求(如 Webpack devServer)。 10....预检请求(复杂请求如 PUT、DELETE 或自定义头部): 浏览器先发送 OPTIONS 请求,检查服务端是否允许实际请求的 Method 和 Headers。

    1.6K21

    【JS】1917- 8 个关于 Promise 高级用途的技巧

    但实际上,Promise 有很多巧妙的高级用法,并且一些高级用法在 alova 请求策略库内部也被广泛使用。 现在,我将与大家分享8个高级使用技巧。希望这些技巧能够对你有所帮助,现在,我们就开始吧。...承诺实施请求共享 当一个请求已经发出但尚未得到响应时,再次发出相同的请求,就会造成请求的浪费。 此时,我们可以将第一个请求的响应与第二个请求共享。...当请求发生错误时,会触发 Promise 的 then 的第二个回调函数和 catch。 乍一看没有区别,但实际上前者无法捕获then当前第一个回调函数中抛出的错误,但catch可以。...接下来我们分析一下 注:以下内容对新手不友好,请谨慎阅读。 首先先保存中间件函数,在listen函数中收到请求后调用洋葱模型执行。...总结 以上就是我今天想与你分享的8个关于Promise的高级用途的全部内容,如果你觉得有用的话,请记得点赞我,关注我,并将这个内容分享给你的小伙伴们,也许能够帮助到他。

    48610

    金九银十,为期2周的前端面经汇总(初级前端)

    console.log(a); //undefined var a = "9"; // 实际运行表示变量a已声明未赋值,在js引擎中的运行过程是: var a;...1.2 插槽显不显示、怎样显示是由父组件来控制的,而插槽在哪里显示就由子组件来进行控制 插槽使用 2.1 默认插槽 在子组件中写入slot,slot所在的位置就是父组件要显示的内容 2.2 具名插槽...vue Router有哪些模式 hash 模式:后面的 hash 值的变化,浏览器既不会向服务器发出请求,浏览器也不会刷新,每次 hash 值的变化会触发 hashchange 事件。...只是当它们执行修改时,虽然改变了当前的 URL,但浏览器不会立即向后端发送请求。...2.浏览器向CDN负载均衡发出访问,CDN负载均衡根据用户IP地址及URL,判断距离、有无内容、负载情况后返回用户所属区域的最佳cdn缓存服务器IP。

    3.4K20

    Superagent 异步请求:如何处理复杂的 HTTP 场景

    ; }}// 调用函数fetchData('https://api.example.com/data');在上述代码中,superagent.get(url) 发起一个 GET 请求,并返回一个...if (error.response) { // 服务器返回了响应,但状态码不是 2xx console.error('服务器返回错误:', error.response.status..., error.response.text); } else if (error.request) { // 请求已发出,但没有收到响应 console.error.../data');在上述代码中,我们通过 error.response 检查服务器是否返回了响应,通过 error.request 检查请求是否发出但未收到响应,通过 error.message 检查其他错误原因...如果任何一个请求失败,Promise.all 会抛出错误。五、代理设置在某些情况下,我们可能需要通过代理服务器发送 HTTP 请求,例如在爬虫或跨域请求中。

    64900

    HTTP响应状态码:除了404,还有啥?

    · 205 - Reset Content 没有新的内容,但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容。...· 401 - Unauthorized (未授权) 请求要求进行身份验证。登录后,服务器可能会返回对页面的此响应。...应答中会包含一个WWW-Authenticate头,浏览器据此显示用户名字/密码对话框,然后在填写合适的Authorization头后再次发出请求。...这些具体的错误代码在浏览器中显示,但不在 IIS 日志中显示: · 401.1 - 登录失败。 · 401.2 - 服务器配置导致登录失败。...如果服务器返回此响应,那么,服务器还会指明请求者应当使用的代理。 · 408 - Request Timeout 在服务器许可的等待时间内,客户一直没有发出任何请求。客户可以在以后重复同一请求。

    2.7K20

    校招前端二面面试题合集

    常见的HTTP请求头和响应头HTTP Request Header 常见的请求头:Accept:浏览器能够处理的内容类型Accept-Charset:浏览器能够显示的字符集Accept-Encoding...:浏览器能够处理的压缩编码Accept-Language:浏览器当前设置的语言Connection:浏览器与服务器之间连接的类型Cookie:当前页面设置的任何CookieHost:发出请求的页面所在的域...Referer:发出请求的页面的URLUser-Agent:浏览器的用户代理字符串HTTP Responses Header 常见的响应头:Date:表示消息发送的时间,时间的描述格式由rfc822定义...(1)Promise的实例有三个状态:Pending(进行中)Resolved(已完成)Rejected(已拒绝)当把一件事情交给promise时,它的状态就是Pending,任务完成了状态就变成了Resolved...IP,本例子会返回www.test.com的地址Local DNS Server会缓存结果,并返回给用户,缓存在系统中CDN的工作原理: (1)用户未使用CDN缓存资源的过程:浏览器通过DNS对域名进行解析

    86210
    领券