日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

AJAX原理以及axios、fetch區別實例詳解

瀏覽:344日期:2022-06-12 09:44:26
目錄
  • AJAX原理
  • Promise封裝Ajax
  • JQ Ajax、Axios、Fetch的核心區別
    • JQuery Ajax
    • Axios
    • Fetch
  • 補充:為什么要用axios?
    • 總結

      AJAX原理

      • Ajax的原理簡單來說是在用戶和服務器之間加了—個中間層(AJAX引擎),通過XmlHttpRequest對象來向服務器發異步請求,從服務器獲得數據,然后用javascript來操作DOM而更新頁面。使用戶操作與服務器響應異步化。
      • Ajax的過程只涉及JavaScript、XMLHttpRequest和DOM。XMLHttpRequest是ajax的核心機制

      XMLHttpRequest(XHR)對象用于與服務器交互。通過 XMLHttpRequest 可以在不刷新頁面的情況下請求特定 URL,獲取數據。這允許網頁在不影響用戶操作的情況下,更新頁面的局部內容。XMLHttpRequest 可以用于獲取任何類型的數據,而不僅僅是 XML。甚至支持 HTTP以外的協議(包括 file:// 和 FTP),盡管可能受到更多出于安全等原因的限制。

      /** 1. 創建Ajax對象 **/var xhr = window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP");// 兼容IE6及以下版本/** 2. 配置 Ajax請求 **/xhr.open("get", url, true)/** 3. 發送請求 **/xhr.send(null); // 嚴謹寫法/** 4. 監聽請求,接受響應 **/xhr.onreadystatechange = function(){    if(xhr.readyState == 4){if(xhr.status == 200){    success(xhr.responseText);} else {     /** false **/    fail && fail(xhr.status);}    }}
      • onreadystatechange:當 readyState 屬性發生變化時,調用的事件處理函數

      • readyState:

        值狀態描述0UNSENT代理被創建,但尚未調用 open() 方法。1OPENEDopen() 方法已經被調用。2HEADERS_RECEIVEDsend() 方法已經被調用,并且頭部和狀態已經可獲得。3LOADING下載中; responseText 屬性已經包含部分數據。4DONE下載操作已完成。
      • response:返回的包含整個響應實體

      • responseText:返回一個DOMString,該 DOMString 包含對請求的響應,如果請求未成功或尚未發送,則返回 null。

      • responseType:一個用于定義響應類型的枚舉值(enumerated value)。

        類型解釋“ ”空的 responseType 字符串與默認類型 "text" 相同。"arraybuffer"response 是一個包含二進制數據的 JavaScript ArrayBuffer。"blob"response 是一個包含二進制數據的 Blob 對象。"document"response 是一個 HTMLDocument或XMLDocument"json"response是通過將接收到的數據內容解析為JSON的JS對象"text"response 是 DOMString 對象中的文本。"ms-stream"response是流式下載的一部分;此響應類型僅允許用于下載請求,并且僅受 Internet Explorer 支持。
      • status:返回一個無符號短整型(unsigned short)數字,代表請求的響應狀態。

        var xhr = new XMLHttpRequest();console.log("UNSENT", xhr.status);xhr.open("GET", "/server", true);console.log("OPENED", xhr.status);xhr.onprogress = function () {  console.log("LOADING", xhr.status);};xhr.onload = function () {  console.log("DONE", xhr.status);};xhr.send(null);/** * 輸出如下: * * UNSENT(未發送) 0 * OPENED(已打開) 0 * LOADING(載入中) 200 * DONE(完成) 200 */
      • withCredentials:一個布爾值,用來指定跨域 Access-Control 請求是否應當帶有授權信息,如 cookie 或授權 header 頭。xhr.withCredentials=true

      • upload:代表上傳進度

      ajax 有那些優缺點?

      • 優點:

        • 通過異步模式,提升了用戶體驗.
        • 優化了瀏覽器和服務器之間的傳輸,減少不必要的數據往返,減少了帶寬占用.
        • Ajax在客戶端運行,承擔了一部分本來由服務器承擔的工作,減少了大用戶量下的服務器負載。
        • Ajax可以實現動態不刷新(局部刷新)
      • 缺點:

        • 安全問題 AJAX暴露了與服務器交互的細節。
        • 對搜索引擎的支持比較弱。
        • 不容易調試。

      Promise封裝Ajax

      promise 封裝實現:

      // promise 封裝實現:function getJSON(url) {  // 創建一個 promise 對象  let promise = new Promise(function(resolve, reject) {    let xhr = new XMLHttpRequest();    // 新建一個 http 請求    xhr.open("GET", url, true);    // 設置狀態的監聽函數    xhr.onreadystatechange = function() {      if (this.readyState !== 4) return;      // 當請求成功或失敗時,改變 promise 的狀態      if (this.status === 200) {resolve(this.response);      } else {reject(new Error(this.statusText));      }    };    // 設置錯誤監聽函數    xhr.onerror = function() {      reject(new Error(this.statusText));    };    // 設置響應的數據類型    xhr.responseType = "json";    // 設置請求頭信息    xhr.setRequestHeader("Accept", "application/json");    // 發送 http 請求    xhr.send(null);  });  return promise;}

      JQ Ajax、Axios、Fetch的核心區別

      JQuery Ajax

      Ajax前后端數據通信「同源、跨域」

      // 用戶登錄 -> 登錄成功 -> 獲取用戶信息/* 回調地獄 */$.ajax({    url: "http://127.0.0.1:8888/user/login",    method: "post",    data: Qs.stringify({account: "18310612838",password: md5("1234567890")    }),    success(result) {if (result.code === 0) {    // 登錄成功    $.ajax({url: "http://127.0.0.1:8888/user/list",method: "get",success(result) {    console.log(result);}    });}    }});

      優缺點:

      • 本身是針對MVC的編程,不符合現在前端MVVM的浪潮
      • 基于原生的XHR開發,XHR本身的架構不清晰,已經有了fetch的替代方案
      • JQuery整個項目太大,單純使用ajax卻要引入整個JQuery非常的不合理(采取個性化打包的方案又不能享受CDN服務)

      Axios

      Axios也是對ajax的封裝,基于Promise管理請求,解決回調地獄問題

      axios({    method: "post",    url: "/user/login",    data: {username: "name",password: "password"    }}).then(function (response) {    console.log(response);}).catch(function (error) {    console.log(error);});// 或使用 async await(async function () {    let result1 = await axios.post("/user/login", {username: "name",password: "password"    });    let result2 = await axios.get("/user/list");    console.log(result1, result2);})(); 

      優缺點:

      • 從瀏覽器中創建 XMLHttpRequest
      • 從 node.js 發出 http 請求
      • 支持 Promise API
      • 攔截請求和響應
      • 轉換請求和響應數據
      • 取消請求
      • 自動轉換JSON數據
      • 客戶端支持防止CSRF/XSRF

      Fetch

      Fetch是ES6新增的通信方法,不是ajax,但是他本身實現數據通信,就是基于promise管理的

      try {  let response = await fetch(url, options);  let data = response.json();  console.log(data);} catch(e) {  console.log("Oops, error", e);}

      示例:

      (async function () {    let result = await fetch("http://127.0.0.1:8888/user/login", {method: "post",headers: {    "Content-Type": "application/x-www-form-urlencoded"},body: Qs.stringify({    name: "name",    password: "password"})    })    let data = result.json();    console.log(data)?    let result2 = await fetch("http://127.0.0.1:8888/user/list").then(response => {return response.json();    });    console.log(result2);})(); 

      優缺點:

      • fetcht只對網絡請求報錯,對400,500都當做成功的請求,需要封裝去處理
      • fetch默認不會帶cookie,需要添加配置項
      • fetch不支持abort,不支持超時控制,使用setTimeout及Promise.reject的實現的超時控制并不能阻止請求過程繼續在后臺運行,造成了量的浪費
      • fetch沒有辦法原生監測請求的進度,而XHR可以

      補充:為什么要用axios?

      axios 是一個基于Promise 用于瀏覽器和 nodejs 的 HTTP 客戶端,它本身具有以下特征:

      • 從瀏覽器中創建 XMLHttpRequest
      • 從 node.js 發出 http 請求
      • 支持 Promise API
      • 攔截請求和響應
      • 轉換請求和響應數據
      • 取消請求
      • 自動轉換JSON數據
      • 客戶端支持防止CSRF/XSRF
      • axios既提供了并發的封裝,也沒有fetch的各種問題,而且體積也較小,當之無愧現在最應該選用的請求的方式。

      三選一絕必是axios了。其流程圖如下:

      總結

      到此這篇關于AJAX原理以及axios、fetch區別的文章就介紹到這了,更多相關AJAX原理 axios、fetch區別內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

      標簽: Ajax
      相關文章:
      日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
      欧美三级第一页| 国产自产自拍视频在线观看| 免费人成网站在线观看欧美高清| 亚洲精选久久| 精品免费av一区二区三区| av最新在线| 男女男精品网站| 欧美啪啪一区| 成人啊v在线| 日本一区二区中文字幕| 91中文字幕精品永久在线| 日本欧美在线看| 狠狠久久婷婷| 久久精品一区二区不卡| 久久国产精品免费一区二区三区| 亚洲福利久久| 视频一区视频二区中文| 福利一区二区免费视频| 视频一区在线播放| 中文字幕在线看片| 欧美一区成人| 亚洲性视频h| 欧美激情在线精品一区二区三区| 91久久午夜| caoporn视频在线| 亚洲欧美日韩国产一区二区| av综合电影网站| 午夜视频精品| 伊人网在线播放| 国产精品主播| 视频一区二区中文字幕| 国产欧美自拍| 久久亚洲视频| 99久久九九| 福利一区在线| 国产日韩欧美在线播放不卡| 国产亚洲福利| 91精品亚洲| 麻豆一区二区三区| 色婷婷狠狠五月综合天色拍| 国产高潮在线| 麻豆国产精品777777在线| 亚洲精品第一| 视频一区二区国产| 伊人影院久久| 久久国产日本精品| 国产亚洲观看| 综合色一区二区| 日韩成人精品一区二区| 亚洲精品欧美| 在线精品亚洲| 激情亚洲影院在线观看| 国产精品任我爽爆在线播放| 久久天堂影院| 亚洲免费资源| 激情亚洲影院在线观看| 日韩一区二区三免费高清在线观看| 青青草国产精品亚洲专区无| 欧美福利一区| 国产一区二区视频在线看| 日本不卡高清视频| 国产在线日韩| 国产精品福利在线观看播放| 欧美天堂一区二区| 涩涩涩久久久成人精品| 合欧美一区二区三区| 岛国av在线网站| 精品99久久| 国产精品99一区二区三| 日韩1区2区3区| 亚洲欧美专区| 亚洲三级在线| 国产亚洲在线观看| 亚洲精品2区| 亚洲女人av| 国产一区导航| 日韩高清中文字幕一区二区| 欧美韩日一区| 欧美激情国产在线| 色婷婷狠狠五月综合天色拍| 神马午夜在线视频| 亲子伦视频一区二区三区| 亚洲精品极品少妇16p| 国产美女精品| 欧美亚洲一区二区三区| 国产精品a级| 亚洲综合电影| 丝瓜av网站精品一区二区| 日韩一区二区三区精品| 国产精久久久| 性感美女一区二区在线观看| 午夜精品成人av| 亚洲欧洲一区| 日韩av片子| 人在线成免费视频| 亚洲激情黄色| 欧美黄色一区二区| 91九色精品| 国产精品mv在线观看| 欧美1区免费| 国产精品一区二区三区美女 | 日韩精品中文字幕吗一区二区 | 91欧美在线| 久久av一区| 国产一区二区三区黄网站| 亚洲天堂成人| 欧美欧美黄在线二区| 亚洲大片在线| 国产精品久久久久久久久久齐齐| 精品久久视频| 亚洲精品少妇| 91日韩欧美| 亚洲精品极品| 蜜臀av免费一区二区三区| 久久免费精品| 亚洲精品免费观看| 婷婷精品视频| 欧美香蕉视频| 国产va免费精品观看精品视频| 亚洲精品观看| 美女精品在线观看| 欧美二区视频| 99精品综合| 特黄特色欧美大片| 成人一二三区| 精品成av人一区二区三区| 日本aⅴ亚洲精品中文乱码| 免费欧美一区| 国产精品成久久久久| 国产精品一在线观看| 欧美专区一区| 91精品丝袜国产高跟在线| 一区二区三区国产盗摄| 免费看欧美美女黄的网站| 性色av一区二区怡红| 男女男精品网站| 丝袜a∨在线一区二区三区不卡| 欧美日韩国产高清电影| 久久蜜桃精品| 亚洲午夜av| 亚洲资源av| 综合激情一区| 乱人伦精品视频在线观看| 亚洲欧美视频| 日本成人在线一区| 国产精品久久久久9999高清| 国产精品天天看天天狠| 狠狠久久伊人中文字幕| 国产成人精品一区二区三区在线| 精品欧美视频| 久久国产主播| 视频一区中文字幕| 国产精品欧美大片| 视频在线不卡免费观看| 亚洲电影在线一区二区三区| 性色一区二区| 国产精品网站在线看| 精品资源在线| 亚洲精品影院在线观看| 日韩一区电影| 视频一区中文字幕国产| 国产精品久久久网站| 99免费精品| 欧美亚洲一区二区三区| 99精品综合| 欧美亚洲二区| 国产高清一区二区| 精品久久精品| 日韩精品亚洲aⅴ在线影院| 波多野结衣久久精品| 在线精品国产亚洲| 国产在线观看www| 午夜在线播放视频欧美| 韩日一区二区| 日本a级不卡| 尹人成人综合网| 国产aⅴ精品一区二区四区| 香蕉久久精品| 精品一区视频| 欧美亚洲国产日韩| 欧美午夜不卡| 久久精品影视| 国产aa精品| 国产激情综合| 欧美亚洲一区二区三区| 婷婷亚洲五月色综合| 国产suv精品一区| 中文字幕免费精品| 五月天综合网站| 热三久草你在线| 成人在线超碰| 久久精品国产久精国产| 日韩国产91| 日韩精品一区二区三区av| 三级在线观看一区二区| 美女精品在线观看| 亚洲黄色影院| 久久av在线| 亚洲ww精品| 中文字幕免费一区二区|