var myHeaders = new Headers();
var myInit = {
method: 'GET',
headers: myHeaders,
mode: 'cors',
cache: 'default'
var myRequest = new Request('/api/getItems', myInit);
fetch(myRequest).then(function(response) {
return response.json();
}).then(function(res) {
console.log(res)
Request()
和 fetch()
接受同样的参数。你甚至可以传入一个已存在的 request 对象来创造一个拷贝:
var anotherRequest = new Request(myRequest,myInit);
这个很有用,因为 request 和 response bodies 只能被使用一次(译者注:这里的意思是因为设计成了 stream 的方式,所以它们只能被读取一次)。创建一个拷贝就可以再次使用 request/response 了,当然也可以使用不同的 init
参数。
注意:clone()
方法也可以用于创建一个拷贝。它在语义上有一点不同于其他拷贝的方法。其他方法(比如拷贝一个 response)中,如果 request 的 body 已经被读取过,那么将执行失败,然而 clone()
则不会失败。
当接收到一个代表错误的 HTTP 状态码时,从 fetch()
返回的 Promise 不会被标记为 reject, 即使该 HTTP 响应的状态码是 404 或 500。相反,它会将 Promise 状态标记为 resolve (但是会将 resolve 的返回值的 ok
属性设置为 false ),仅当网络故障时或请求被阻止时,才会标记为 reject。当状态码在200-299之间时,ok
属性才会返回 true。
默认情况下,fetch
不会从服务端发送或接收任何 cookies, 如果站点依赖于用户 session,则会导致未经认证的请求(要发送 cookies,必须设置 credentials 选项为 include)。自从2017年8月25日后,默认的credentials政策变更为same-origin
Firefox也在61.0b13中改变默认值
五、Init 对象
一个配置项对象,包括所有对请求的设置。可选的参数有:
1. method -
支持 GET
, POST
, PUT
, DELETE
, HEAD
2. headers
- 对应的 Headers
对象
3. body - 请求参数
4. credentials
- 设置 cookies 是否随请求一起发送。
可选值: omit: (默认, 不发送 Cookie)
same-origin:同域下自动发送 Cookie
include:始终发送 Cookie,即使是跨域。
5. mode
- 是否允许跨域请求,以及哪些响应的属性是可读的。
可选值:cors
:(默认, 允许跨域请求,将遵守 CORS 协议)
no-cors:该模式允许来自 CDN 的脚本、其他域的图片和其他一些跨域资源。前提条件是请求的 method 只能是 HEAD、GET 或 POST。而且 js 不能访问 Response 对象中的任何属性
same-origin:要同源,不允许跨域。
navigate:支持导航的模式,仅用于 HTML 导航。
6. cache
- 设置缓存模式。
可选值: default:浏览器在其 HTTP 缓存中查找匹配的请求。
a. 如果匹配并且是新鲜的,它将从缓存中返回。
b. 如果存在匹配但已失效,则浏览器将向远程服务器发出有条件的请求。如果服务器指出资源没有改变,它将从缓存中返回。否则资源将从服务器下载并且缓存将被更新。
c. 如果没有匹配,浏览器将发出正常的请求,并且下载的资源更新缓存。
no-store:浏览器从远程服务器获取资源,而不先查看缓存,并且不会使用下载的资源更新缓存。
reload:浏览器从远程服务器获取资源,而不先查看缓存,但随后将使用下载的资源更新缓存。
no-cache:浏览器在其 HTTP 缓存中查找匹配的请求。
a. 如果匹配,新鲜或陈旧,浏览器将向远程服务器发出有条件的请求。如果服务器指出资源没有改变,它将从缓存中返回。否则资源将从服务器下载并且缓存将被更新。
b. 如果没有匹配,浏览器将发出正常的请求,并用下载的资源更新缓存。
force-cache:浏览器在其 HTTP 缓存中查找匹配的请求。
a. 如果有匹配,新鲜或陈旧,它将从缓存中返回。
b. 如果没有匹配,浏览器将发出正常的请求,并用下载的资源更新缓存。
only-if-cached:浏览器在其 HTTP 缓存中查找匹配的请求。只能用在 mode 为 same-origin 的情况下
a. 如果匹配,新鲜或陈旧,将从缓存中返回。
b. 如果没有匹配,浏览器将返回一个错误。
7. referrer
- 请求的引用者(例如:client)
8. redirect
- 定义重定向处理方式。
可选值:follow(默认), error, manual。
9. integrity
- 子资源完整性值。
六、Body
不管是请求还是响应都能够包含body对象. body也可以是以下任意类型的实例
Body
类定义了以下方法 (这些方法都被 Request
和Response
所实现)以获取body内容. 这些方法都会返回一个被解析后的Promise
对象和数据.
fetch("/api/getItems").then(res => {
return res.json();
参考文献:https://developer.mozilla.org/zh-CN/docs/Web/API/Fetch_API/Using_Fetch
原生fetch虽然已经支持 promise 了,相比 XMLHttpRequest 已然好用了很多,但是参数还是需要自己处理,比较麻烦。通过数据流(Stream对象)处理数据,可以分块读取,有利于提高网站性能,对于大文件或者网速慢的场景极为有用。采用了模块化设计,API分散于多个对象中(如:Response对象、Request对象、Header对象)Response 对象根据服务器返回的不同类型的数据,提供了不同的读取方法。,此外还可以接收第二个参数,作为配置对象,可以自定义发出的HTTP请求。
因为涉及的是插件开发,在Background中调用Fetch,此时是没有域名的,而之前无论用Ajax发送请求的时候,也不能直接自己指定Cookie传到服务端,这里应该区分对待前端http.request和后端request请求,前端因为受到平台浏览器的约束,对某些功能是不放开的,尤其是调用浏览器本身自带的对象,是有底层约束的,所以不能自定义敏感Cookie这种事情,自然是解决不了的,这也是之前的知识判断失误
1、fetch是一个类似于Promise功能的web接口实现方式,目前除了IE浏览器,其他的高版本的浏览器都支持。官方是这样描述Fetch的:Fetch API提供了一个获取资源的API接口(包括跨网络),任何使用过XMLHttpRequest的是都会熟悉它,但是它提供了更强大和更灵活的功能集。
转载:前后端数据交互(四)——fetch 请求详解 - 前端人 - 博客园
fetch 是 XMLHttpRequest 的升级版,使用js脚本发出网络请求,但是与 XMLHttpRequest 不同的是,fetch 方式使用 Promise,相比 XMLHttpRequest 更加简洁。所以我们告别XMLHttpRequest,引入 fetch 如何使用?
一、fetch介绍
fetch() 是一个全局方法,提供一种简单,合理的方式跨网络获取资源。它的请求是基于 Promise 的,需要详细学习 P
fetch基本使用方法
1,fetch与ajax作用相同,发送请求
2,ajax是使用XMLHttpRequest对象来请求数据 因此需要先new XMLHttpRequest();然后连接发送接收
3,fetch是一个方法 fetch(‘地址’) 即可发送一个请求
4,fetch 的返回格式采用的是Promise分格 因此可以 fetch(‘地址’) .then() 之后可以一直then() then方法返回的也是Promise
5,fetch(‘地址’) .then(结果=>{
fetch()是 XMLHttpRequest 的升级版,用于在 JavaScript 脚本里面发出 HTTP 请求
fetch('url')
.then(response => response.json())
.then(data => console.log(data))
在用法上,fetch()接受一个 URL 字符串作为参数,默认向该网址发出 GET 请求,返回一个 Promise 对象,支持.then的链式写法
二 · Respon
原文链接:css-tricks.com/using-fetch… 。 本文介绍了Fetch基本使用方法及zlFetch库的使用
无论用JavaScript发送或获取信息,我们都会用到Ajax。Ajax不需要刷新页面就能发送和获取信息,能使网页实现异步更新。
几年前,初始化Ajax一般使用jQuery的ajax方法:
$.ajax('some-url', {
success: (data) ...
影响点:对引用静态实例的store有影响,比如进入编辑页调用info接口,接口还在pending时切出去,点击新建(新建和编辑使用的同一个公共组件和同一个store),新建页面展示info接口的值;
可通过AbortController 控制一个或多个web请求;具体AbortController - Web API 接口参考 | MDN
以下三条关键点:
1.@observable abortController: any= new AbortController();
const fetc
function sendResquest(urls, max, callback) {
let urlsCopy = [... urls];//防止影响外部urls变量
function request() {
function Handle () {...