前言:ant-design-pro的技術組成主要是react+redux+dva+antd+fetch+roadhog,dva在源碼包index.js裏面導出了fetch,可是若是不想使用fetch庫,想換成其餘庫也是能夠的(axios後期擴展性更好些),roadhog主要是基於webpack實現的封裝。關於fetch發送請求的代碼都封裝在了utils/request.js文件中。PS:這裏重點梳理對fetch()的使用學習,原文地址:大灰狼的小棉羊哥哥博客javascript
function reqListener(){ var data=JSON.parse(this.responseText); console.log(data); } function reqError(err){ console.log("Fetch錯誤:"+err); } var oReq=new XMLHttpRequest(); oReq.onload=reqListener; oReq.onerror=reqError; oReq.open("get","/students.json",true); oReq.send();
fetch("/students.json") .then( function(response){ if(response.status!==200){ console.log("存在一個問題,狀態碼爲:"+response.status); return; } //檢查響應文本 response.json().then(function(data){ console.log(data); }); } ) .catch(function(err){ console.log("Fetch錯誤:"+err); });
fetch("/students.json") .then( function(response){ console.log(response.headers.get('Content-Type')); console.log(response.headers.get('Date')); console.log(response.status); console.log(response.statusText); console.log(response.type); console.log(response.url); } )
fetch("http://www.html5online.com.cn/cors-enabled/students.json",{mode:"cors"}) .then( function(response){ console.log(response.headers.get('Content-Type')); console.log(response.headers.get('Date')); console.log(response.status); console.log(response.statusText); console.log(response.type); console.log(response.url); } ) .catch(function(err){ console.log("Fetch錯誤:"+err); });
function status(response){ if(response.status>=200 && response.status<300){ return Promise.resolve(response); } else{ return Promise.reject(new Error(response.statusText)); } } function json(response){ return response.json(); } fetch("/students.json") .then(status) .then(json) .then(function(data){ console.log("請求成功,JSON解析後的響應數據爲:",data); }) .catch(function(err){ console.log("Fetch錯誤:"+err); });
在上述代碼中,咱們定義了status函數,該函數檢查響應的狀態碼並返回Promise.resolve()方法或Promise.reject()方法的返回結果(分別爲具備確定結果的Promise及具備否認結果的Promise)。這是fetch()方法鏈中的第一個方法。若是返回確定結果,咱們調用json()函數,該函數返回來自於response.json()方法的Promise對象。在此以後咱們獲得了一個被解析過的JSON對象,若是解析失敗Promise將返回否認結果,致使catch段代碼被執行。html
這樣書寫的好處在於你能夠共享fetch請求的邏輯,代碼容易閱讀、維護及測試。html5
fetch(url,{ method:"post", headers:{ "Content-type":"application:/x-www-form-urlencoded:charset=UTF-8" }, body:"name=lulingniu&age=40" }) .then(status) .then(json) .then(function(data){ console.log("請求成功,JSON解析後的響應數據爲:",data); }) .catch(function(err){ console.log("Fetch錯誤:"+err); });
fetch(url,{ credentials:"include" })
pro約定了當狀態碼200~300爲網絡請求成功狀態,其他均爲失敗狀態。java
其次,pro對delete方法以及網絡狀態爲204時自動作了text()方法,在校驗delete方法時,要注意json.parse()後進行校驗,而且謹慎使用204的網絡狀態。 react
資料來源:ryzZZ簡書 webpack