1.fetch获取资源
会返回一个promise对象,所以可用then等方法。来进行后续处理,下面是鄙人的一个例子,a.txt文件,是当前目录下的一个文件
let url = './a.txt';
fetch(url).then(res => {
res.text().then(data => {
console.log(data);
});
})
fetch获取资源后,返回一个promise对象,所以可用then等方法。(这里的res是请求的结果)。
我们将这个结果打印出来,看看都有些啥,嘿嘿嘿~~~
这个结果是个对象,包含了请求的状态,对于一次请求是否成功,即是否真的返回数据,我们用Response.ok
来判断,看是否为真。
2.特别说明
- 特别要注意:当http请求返回的状态码是非200时,返回的promise依然是
resolve
的状态。但是会将 resolve 的返回值的 ok 属性设置为 false
。因此,可以通过ok属性值,判断请求是否正常响应。 - fetch只有在遇到
网络错误或者请求被阻止
的时侯,才会reject
,并且抛出错误。
3.fetch请求返回的数据
返回的数据格式,是一个Response对象,并不是我们理想中的js对象,所以得转化一下。
return response.json(); // 将 response.body 通过 JSON.parse 转换为 JS 对象
注意:response.json()
会返回一个Promise对象。所以,我们可以用.then()
的方法进行后续处理,比如,处理转化以后的数据。(.json()
方法的作用是将 response.body
通过 JSON.parse
转换为 JS 对象,同时,返回一个promise对象到外部)
4.注意点
-
重要的一个点是:fetch受跨域限制,不能发送用于解决跨域的jsonp请求方式。但是有成熟的三方库可以解决:
fetch-jsonp
(ajax是可以发送jsonp请求的) -
默认情况下,fetch 不会从服务端发送或接收任何 cookies, 如果站点依赖于
用户 session
,则会导致未经认证的请求(要发送 cookies,必须设置 credentials
选项)。
fetch(url,{
method: 'POST',
credentials: 'include' //必须加上这个
}
- fetch代表着更先进的技术方向,但是
目前兼容性不是很好
。因此,最好不要在项目使用。