日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
前后端數(shù)據(jù)交互—Ajax、Fetch和Axios優(yōu)缺點及比較

一、ajax、fetch 和 axios 簡介

1.1、ajax

ajax是最早出現(xiàn)發(fā)送后端請求的技術(shù),屬于原生 js 。ajax使用源碼,請點擊《原生 ajax 請求詳解》查看。一般使用之前,我們都需要把它們封裝使用,就以 jQuery 的 ajax 為例。

封裝的 ajax 如下:

 
 
 
  1. const $ = {}; 
  2. $.ajax = (obj)=>{ 
  3.  var xhr; 
  4.  if (window.XMLHttpRequest) { 
  5.   xhr = new XMLHttpRequest(); 
  6.  } else if (window.ActiveXObject) { // IE 
  7.   try { 
  8.    xhr = new ActiveXObject('Msxml2.XMLHTTP'); 
  9.   } catch (e) { 
  10.    try { 
  11.     xhr = new ActiveXObject('Microsoft.XMLHTTP'); 
  12.    } catch (e) {} 
  13.   } 
  14.  } 
  15.  if (xhr) { 
  16.   xhr.onreadystatechange = () =>{ 
  17.    if (xhr.readyState === 4) { 
  18.     if (xhr.status === 200) { 
  19.      obj.success(xhr.responseText); //返回值傳callback 
  20.     } else { 
  21.      //failcallback 
  22.      obj.error('There was a problem with the request.'); 
  23.     } 
  24.    } else { 
  25.     console.log('still not ready...'); 
  26.    } 
  27.   }; 
  28.   xhr.open(obj.method, obj.url, true); 
  29.   // 設(shè)置 Content-Type 為 application/x-www-form-urlencoded 
  30.   // 以表單的形式傳遞數(shù)據(jù) 
  31.   xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
  32.   xhr.send(util(obj.data));//處理body數(shù)據(jù) 
  33.  } 
  34.   
  35.  //處理數(shù)據(jù) 
  36.  const util = (obj)=>{ 
  37.  var str = '' 
  38.  for (key in obj){ 
  39.   str += key +'='+obj[key]+'&' 
  40.   } 
  41.   return str.substring(0,str.length-1) 
  42.  }     

 封裝完成,開始使用的時候你會發(fā)現(xiàn),body和header處理得有些亂,還有回調(diào)地獄的問題,所以我們出現(xiàn)了新的 fetch 請求技術(shù)。

1.2、fetch

fetch 首先解決了回調(diào)地獄的問題,他返回的結(jié)果是一個 Promise 對象,對 Promise 不熟的可點擊《Promise詳解》。

fetch 使用如下:

 
 
 
  1. fetch(url,options).then(response=>{ 
  2. // handle HTTP response 
  3. },error=>{ 
  4. // handle network error 
  5. }) 

fetch 發(fā)送網(wǎng)絡(luò)請求時,可以傳輸任意數(shù)據(jù)格式,非常簡便。但是 fetch 的超時、終止取消并不方便,只能通過取消 Promise 來完成,如果有多個 fetch 請求時,更難處理。除此之外,fetch 是比較新的技術(shù),低版本瀏覽器和IE瀏覽器支持性不好。

1.3、axios

axios 功能非常強大,包括 取消請求,超時處理,進度處理等等。但它的本質(zhì)還是 ajax,基于 Promise 進行封裝,既解決回調(diào)地獄問題,又能很好地支持各個瀏覽器。

axios使用代碼如下:

 
 
 
  1. axios.post('/user', { 
  2.  firstName: 'Fred', 
  3.  lastName: 'Flintstone' 
  4. }) 
  5. .then(function (response) { 
  6.  console.log(response); 
  7. }) 
  8. .catch(function (error) { 
  9.  console.log(error); 
  10. }); 

二、ajax、fetch、axios的優(yōu)缺點

2.1、ajax 的優(yōu)缺點:

  • 屬 js 原生,基于XHR進行開發(fā),XHR 結(jié)構(gòu)不清晰。
  • 針對 mvc 編程,由于近來vue和React的興起,不符合mvvm前端開發(fā)流程。
  • 單純使用 ajax 封裝,核心是使用 XMLHttpRequest 對象,使用較多并有先后順序的話,容易產(chǎn)生回調(diào)地獄。

2.2、fetch 的優(yōu)缺點:

  • 屬于原生 js,脫離了xhr ,號稱可以替代 ajax技術(shù)。
  • 基于 Promise 對象設(shè)計的,可以解決回調(diào)地獄問題。
  • 提供了豐富的 API,使用結(jié)構(gòu)簡單。
  • 默認(rèn)不帶cookie,使用時需要設(shè)置。
  • 沒有辦法檢測請求的進度,無法取消或超時處理。
  • 返回結(jié)果是 Promise 對象,獲取結(jié)果有多種方法,數(shù)據(jù)類型有對應(yīng)的獲取方法,封裝時需要分別處理,易出錯。
  • 瀏覽器支持性比較差。

2.3、axios的優(yōu)缺點:

  • 在瀏覽器中創(chuàng)建XMLHttpRequest請求,在node.js中創(chuàng)建http請求。
  • 解決回調(diào)地獄問題。
  • 自動轉(zhuǎn)化為json數(shù)據(jù)類型。
  • 支持Promise技術(shù),提供并發(fā)請求接口。
  • 可以通過網(wǎng)絡(luò)請求檢測進度。
  • 提供超時處理。
  • 瀏覽器兼容性良好。
  • 有攔截器,可以對請求和響應(yīng)統(tǒng)一處理。

分享標(biāo)題:前后端數(shù)據(jù)交互—Ajax、Fetch和Axios優(yōu)缺點及比較
轉(zhuǎn)載來于:http://m.5511xx.com/article/dhsopeg.html