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;