js原生支持,比XHR强大,易用的数据交互对象。
fetch("url").then(res=>{},err=>{});
Response(res)对象成员css
fetch('../public/info.text').then(res => { console.log('res info is:',res); const {ok} = res; if(ok){ console.log('request ok!') }else{ console.log('request error'); } },(err)=>{ //网络错误、链接失败、没法解析对方数据 console.log('request error'); })
运行结果:
能够看到fetch的第一个then里面成功的回调响应对象的一些信息,哎,仔细观察,发现并无咱们真正须要的数据啊,这是怎么肥事儿?其实呢,对于fetch来讲,第一个then,res回调函数中响应对象res里面有一个json()方法,该返回返回一个promise对象,在这个对象的then回调里面就是咱们真正须要的数据了。html
fetch('../public/info.json').then(res=>res.json(),err=>{ console.log(err) }).then(data=>{ console.log('data is:',data) },err1=>{ console.log(err1) })
res对象的几个方法:react
方法 | 解释 | 用途 |
---|---|---|
arrayBuffer | 由于高级语言(包括JS)都不擅长处理二进制数据,因此arrayBuffer是一种让js能读取二进制的对象,但通常状况下,处理二进制数据都是很是复杂的,因此极少使用 | 极少 |
bolb | 性能较好,由于无需任何转换操做 | 图片、视频、音频 |
json | 绝大部分数据文件都以json和数组的方式传输 | 数据 |
text | 文本数据 | 文本、html |
(async () => { try { let res = await fetch('./info.json') let data =await res.json() console.log('data is:',data); } catch (error) { console.log(error) } })()
与async配合起来,从写法上看起来就比较简介,而且使用try...catch...对错误、异常进行处理json
最终的结果也是以上面输出的同样:数组
通常状况下,服务器端的响应头里面的信息,在实际开发中咱们有时候也会获取来进行某些操做,那么使用fetch进行数据通讯的适合,该怎样去获取响应头的信息呢?promise
以上图为例,要获取响应头里面的Content-Type:服务器
res.headers.get('Content-Type')
这就拿到了。获取其余响应头里包含的信息也是同样,调用headers对象的get方法,经过传入键,就能够获取到对应的值。babel
import React from 'react'; import logo from './logo.svg'; import './App.css'; import { thisExpression } from '@babel/types'; class App extends React.Component{ constructor(){ super(); this.state = { users:[], mIcon:'' } } async componentDidMount(){ let res = await fetch('./info.json') let users = await res.json(); let res1 = await fetch('./mCat.jpg') let mBolb = await res1.blob(); this.setState({ users, mIcon:URL.createObjectURL(mBolb) }) } render(){ return( <div> <ul> { this.state.users.map((item,index)=>( <li key={index}> <div>姓名:{item.name}</div> <div>年龄:{item.age}</div> <img src={this.state.mIcon}/> </li> )) } </ul> </div> ) } } export default App;