ajax还在用吗,你还在用AJAX吗?Fetch了解一下

什么是Fetch

一句话总结:Fetch是XMLHttpRequest一个更先进的替代方案(A Modern Replacement for XMLHttpRequest)。

fetch是全局变量window的一个方法,用来发起网络请求、获取资源,是传统基于XMLHttpRequest对象的AJAX技术的更优替代方案。

fetch暂时不支持abort request。

使用方法

先看一个最简单的get用法示例:

// url (required), options (optional)

fetch('https://davidwalsh.name/some/url', {

method: 'get'

}).then(function(response) {

}).catch(function(err) {

// Error :(

});

下面是一个稍微复杂的post用法示例:

fetch(url, {

method: "POST",

body: JSON.stringify(data),

headers: {

"Content-Type": "application/json"

},

credentials: "same-origin"

}).then(function(response) {

response.status     //=> number 100-599

response.statusText //=> String

response.headers    //=> Headers

response.url        //=> String

return response.text()

}, function(error) {

error.message //=> String

})

fetch使用Promises来处理response。fetch接收两个参数:

url:string类型,必选,发起请求的地址

options:object类型,可选,请求的配置参数

还可以使用Request对象实例作为参数的方式发起fetch请求:

var request = new Request(url, options);

fetch(request).then(function(response) {

// handle with response...

}).catch(function(err) {

// Error :(

});

Options配置项

options可以配置以下参数:

1.method (String) - HTTP 请求方法,默认:"GET"

2.body (String, body types) - HTTP 请求主体,示例:

{

body: new URLSearchParams([['foo', 1], ['bar', 2]]).toString()

}

body的类型包括:

Class

Default Content-Type

String

text/plain;charset=UTF-8

URLSearchParams

application/x-www-form-urlencoded;charset=UTF-8

FormData

multipart/form-data

Blob

inherited from the blob.type property

ArrayBuffer

TypedArray

DataView

其他数据结构需要预先编码为上述类型之一。例如,JSON.stringify(data)可用于将数据结构序列化为JSON字符串。

3.headers (Object, Headers) - 请求头,默认:{},示例:

{

headers: new Headers({

'Content-Type': 'application/x-www-form-urlencoded' // 指定提交方式为表单提交

})

}

headers提供以下方法增删改查头部信息:

has(name) (boolean)

get(name) (String)

set(name, value)

append(name, value)

delete(name)

forEach(function(value, name){ ... }, [thisContext])

4.credentials (String) - 跨域请求时方身份验证凭证模式,默认:"omit"

"omit" - 请求中不携带身份验证凭证(例如cookies)

"same-origin" - 在对同一站点的请求中包含身份验证凭证

"include" - 在所有站点的请求中包含身份验证凭证

响应结果Response

Response表示来自服务器的HTTP响应。Response会作为promise回调函数的参数。 包含以下属性:

status (number) - HTTP状态码,范围在100–599之内

statusText (String) - 响应文本,如:"Unauthorized"

ok (boolean) - status为2xx时表示响应成功,值为true

headers (Headers)

url (String)

此外,response还提供了一些方法处理成特定的数据格式并返回一个Promise:

text() - 以字符串形式生成响应文本

json() - 生成JSON.parse(responseText)的结果

blob() - 生成一个Blob

arrayBuffer() - 生成一个ArrayBuffer

formData() - 生成可转发到另一个请求的表单数据

示例:

response.blob().then(function(myBlob) {

// do something with myBlob

});

错误处理

如果出现网络错误或其他原因导致HTTP请求无法完成,fetch()的promise 将会reject该error。

注意,在HTTP 4xx或5xx服务器响应的情况下,promise不会reject。这个promise将像HTTP 2xx一样正常resolve。可以通过检查response.status的状态码来决定如何处理错误:

fetch(...).then(function(response) {

if (response.ok) {

return response

} else {

var error = new Error(response.statusText)

error.response = response

throw error

}

})

兼容情况

截至目前,fetch的浏览器兼容情况如下图所示:

(可以在can I use这个网站查询浏览器兼容性)

4f36a64237642da2bda73a6fd2181d1a.png

如果想要兼容IE及老版本浏览器,可以使用polyfill:whatwg-fetch

Renerence

1.https://github.github.io/fetch/

2.http://louiszhai.github.io/2016/11/02/fetch/

3.https://juejin.im/entry/574512b7c26a38006c43567c

4.https://davidwalsh.name/fetch

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值