目录
1.Fetch介绍
Fetch核心在于对HTTP的抽象,包括 Request,Response,Headers,Body,以及用于初始化异步请求的 global fetch。Fetch API 提供了一个 JavaScript接口,用于访问和操纵HTTP管道的部分,例如请求和响应。它还提供了一个全局 fetch()方法,该方法提供了一种简单,合理的方式来跨网络异步获取资源。
以前经常使用XMLHttpRequest(即俗称的ajax)或是其他的网络API进行异步网络请求,Fetch提供了许多与XMLHttpRequest相同的功能,但被设计成更具可扩展性和高效性。
请注意,fetch规范与jQuery.ajax()主要有两种方式的不同,牢记:
a.当接收到一个代表错误的 HTTP 状态码时,从 fetch()返回的 Promise 不会被标记为 reject, 即使该
HTTP 响应的状态码是 404 或 500。相反,它会将 Promise 状态标记为 resolve (但是会将 resolve
的返回值的 ok 属性设置为 false ),仅当网络故障时或请求被阻止时,才会标记为 reject。
b.默认情况下,fetch 不会从服务端发送或接收任何 cookies, 如果站点依赖于用户 session,则会导致未
经认证的请求(要发送 cookies,必须设置 credentials 选项)。
2.fetch参数介绍
RN中声明的全局fetch方法,Fetch主要包含Request,Headers,Response,Body四部分;
declare function fetch(input?: Request | string, init?: RequestInit): Promise<Response>;
2.1Request
Request在Fetch中用于表示资源请求,Request() 构造器创建一个新的Request 对象。以下Request参数说明:
var myRequest = new Request(input, init);
input
定义你想要fetch的资源。可以是下面两者之一:
a.一个直接包含你希望fetch的资源的URL的 USVString
b.一个 Request 对象.
init 参数可选
一个可选对象,包含希望被包括到请求中的各种自定义选项。可用的选项如下:
a.method: 请求的方法,例如:GET, POST。
b.headers: 任何你想加到请求中的头,其被放在Headers对象或内部值为ByteString 的对象字面量中。
c.body: 任何你想加到请求中的body,可以是Blob, BufferSource, FormData, URLSearchParams,
或 USVString对象。注意GET 和 HEAD请求没有body。
d.mode: 请求的模式, 比如 cors, no-cors, same-origin, 或 navigate。默认值应该为 cors。但在
Chrome中,Chrome 47 之前的版本默认值为 no-cors ,自Chrome 47起,默认值为same-origin。
e.credentials: 想要在请求中使用的credentials:: omit, same-origin, 或 include。默认值应该
为omit。但在Chrome中,Chrome 47 之前的版本默认值为 same-origin ,自Chrome 47起,默认值为include。
f.cache: 请求中想要使用的cache mode
g.redirect: 对重定向处理的模式: follow, error, or manual。在Chrome中,Chrome 47 之前的版
本默认值为 manual ,自Chrome 47起,默认值为follow。
h.referrer: 一个指定了no-referrer, client, 或一个 URL的 USVString 。默认值是client.
i.integrity: 包括请求的 subresource integrity 值 (e.g., sha256-BpfBw7ivV8q2jLiT13fxDYAe2tJllusRSZ273h2nFSE=).
input是必填参数,通常填写请求的远程地址,http://mywebsite/apiinterface;
init填写请求的参数,移动端开发常用参数有method,headers,body;
2.2Headers
Headers 接口允许您对HTTP请求和响应头执行各种操作。 这些操作包括检索,设置,添加和删除。 一个Headers对象具有关联的头列表,它最初为空,由零个或多个键值对组成。你可以使用 append() 方法添加 之类的方法添加到此。在该接口的所有方法中,标题名称由不区分大小写的字节序列匹配。
请求或者响应头已经被占用的Header名称是不能用作其他用途;Header创建:
var myHeaders = new Headers(init);
init 参数可