【react】 react 中 前后端數據的交互方式 (原生的ajax、jq的ajax、axios、fetch )


 

 

 

這是fetch  請求數據的方式

 

 

 

 


 

 

---fetch---基本使用

 

一、fetch

  fetch是一種XMLHttpRequest的一種替代方案,在工作當中除了用ajax獲取后台數據外我們還可以使用fetch、axios來替代ajax

 二、安裝

  

  執行npm install whatwg-fetch --save即可安裝。

 

  為了兼容老版本瀏覽器,還需要安裝npm install es6-promise --save

 

 

三、fetch的基本使用 

  

復制代碼
npm install whatwg-fetch --save
npm install es6-promise --save
import 'es6-promise'
import 'whatwg-fetch'

fetch(url,options).then((res)=>{
  console.log(res);
},function(err){
  console.log(err)
})
復制代碼

 

說明:

    1、fetch的返回值是一個promise對象

 

    2、options

        method:HTTP請求方式,默認是GET

復制代碼
   body:請求的參數

        fetch('/xxx', {

               method: 'post',

               body:'username=zhangsan&age=17'

 

       });
復制代碼

        headers:HTTP請求頭

            因為一般使用JSON數據格式,所以設置ContentType為application/json

 

            credentials:默認為omit,忽略的意思,也就是不帶cookie還有兩個參數,same-origin,意思就是同源請求帶cookie;include,表示無論跨域還是同源請求都會帶cookie

 

 

    3、在.then里面第一個回調函數中處理response

 

        status(number): HTTP返回的狀態碼,范圍在100-599之間

 

        statusText(String): 服務器返回的狀態文字描述

 

        headers: HTTP請求返回頭

 

        body: 返回體,這里有處理返回體的一些方法

 

        text(): 將返回體處理成字符串類型

 

       json(): 返回結果和 JSON.parse(responseText)一樣

 

       blob(): 返回一個Blob,Blob對象是一個不可更改的類文件的二進制數據

如果請求一個XML格式文件,則調用response.text。如果請求圖片,使用response.blob方法

 

注意:

  cookie傳遞必須在header參數里面加上credentials: 'include',才會如xhr一樣將當前cookies帶到請求中去

 

 

 四、get、post請求方式

  1、get

復制代碼
var result = fetch('url', {
        credentials: 'include',
        headers: {
            'Accept': 'application/json, text/plain, */*',
        },    
 });
復制代碼

  2、post

復制代碼
var result = fetch('/api/post', {
        method: 'POST',
        credentials: 'include',
        headers: {
            'Accept': 'application/json, text/plain, */*',
            'Content-Type': 'application/x-www-form-urlencoded'
        },
        // 注意 post 時候參數的形式
        body: "a=100&b=200"
    });
復制代碼

 

五、封裝get和post方法

  1、get

 

復制代碼
import 'es6-promise'
import 'whatwg-fetch'

export default (url)=>({
    var result = fetch(url, {
        credentials: 'include',
        headers: {
            'Accept': 'application/json, text/plain, */*',
        },    
   })
   .then(res=>res.json());
   
   return result
})
復制代碼

 

  2、post

復制代碼
import 'es6-promise'
import 'whatwg-fetch'
import qs from 'qs';
export default (url,data)=>({
    var result = fetch(url, {
        method: 'POST',
        credentials: 'include',
        headers: {
            'Accept': 'application/json, text/plain, */*',
            'Content-Type': 'application/x-www-form-urlencoded'
        },
        // 注意 post 時候參數的形式
        body: qs(data)
    })
    .then(res=>res.json())
    
    return result;
})
復制代碼

 

 

 六、fetch與axios的區別

復制代碼
axios("http://xxx/xxx.json?a=123'").then((res)=>{
     console.log(res)//這里的r是響應結果
})

fetch("http://www.baidu.com").then((res)=>{
        console.log(res);//是一個綜合各種方法的對象,並不是請求的數據
})
復制代碼

fetch返回的是一個未處理的方法集合,我們可以通過這些方法得到我們想要的數據類型。如果我們想要json格式,就執行response.json(),如果我們想要字符串就response.text()

 

axios 

        1、從瀏覽器中創建 XMLHttpRequest

        2、從 node.js 發出 http 請求

        3、支持 Promise API

        4、攔截請求和響應

        5、轉換請求和響應數據

        6、自動轉換JSON數據

        7、客戶端支持防止CSRF/XSRF

 

fetch:

    符合關注分離,沒有將輸入、輸出和用事件來跟蹤的狀態混雜在一個對象里

    更加底層,提供的API豐富(request, response)

    脫離了XHR,是ES規范里新的實現方式

 

1、fetchtch只對網絡請求報錯,對400,500都當做成功的請求,需要封裝去處理

 

2、fetch默認不會帶cookie,需要添加配置項

 

3、fetch不支持abort,不支持超時控制,使用setTimeout及Promise.reject的實

現的超時控制並不能阻止請求過程繼續在后台運行,造成了量的浪費

 

4、fetch沒有辦法原生監測請求的進度,而XHR可以

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM