Ajax,jQuery ajax,axios和fetch的區別

Ajax,jQuery ajax,axios和fetch的區別

Ajax:

Ajax 即“Asynchronous Javascript And XML”(異步 JavaScript 和 XML),是指一種創建交互式網頁應用的網頁開發技術。

Ajax 是一種在無需重新加載整個網頁的情況下,能夠更新部分網頁的技術。

通過在後臺與服務器進行少量數據交換,Ajax 可以使網頁實現異步更新。這意味着可以在不重新加載整個網頁的情況下,對網頁的某部分進行更新。

Ajax技術核心就是XMLHttpRequest對象。

(1)設置請求參數(請求方式,請求頁面的相對路徑,是否異步發送請求)

(2)設置回調函數,一個處理服務器響應的函數,使用 onreadystatechange ,類似函數指針

(3)獲取異步對象的readyState 屬性:該屬性存有服務器響應的狀態信息。每當 readyState 改變時,onreadystatechange 函數就會被執行。

(4)判斷響應報文的狀態,若爲200說明服務器正常運行並返回響應數據。

(5)讀取響應數據,可以通過 responseText 屬性來取回由服務器返回的數據。

var xhr = new XMLHttpRequest();    			// 創建Ajax對象
xhr.open('get', 'aabb.php', true);			// xhr發送請求
xhr.send(null);
xhr.onreadystatechange = function() { 		// xhr獲取響應
    if(xhr.readyState == 4) {
        if(xhr.status == 200) {
            console.log(xhr.responseText);
        }
    }
}
 /* ajax返回的狀態:
     0:(未初始化)請求還沒有建立(open執行前) 
     1:(載入)請求建立了還沒發送(執行了open) 
     2:(載入完成)請求正式發送,send()方法執行完成,已經接收到全部響應內容(執行了send) 
     3:(交互)請求已受理,有部分數據可以用,但還沒有處理完成,正在解析響應內容
     4:(完成)響應內容解析完成,可以在客戶端調用了 
*/ 

Jquery Ajax:

是jQuery框架中的發送後端請求技術,由於jQuery是基於原始的基礎上做的封裝,所以,jquery Ajax自然也是對原始ajax的封裝

$.ajax({
   type: 'POST',
   url: url,
   data: data,
   dataType: dataType,
   success: function () {},
   error: function () {}
});

​ 優缺點:

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

Fetch:

​ fetch號稱是AJAX的替代品,是在ES6出現的,使用了ES6中的promise對象。Fetch是基於promise設計的。Fetch的代碼結構比起ajax簡單多了,參數有點像jQuery ajax。

​ 但是,一定記住fetch不是ajax的進一步封裝,而是原生js。Fetch函數就是原生js,沒有使用XMLHttpRequest對象。

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

你還可以通過Request構造器函數創建一個新的請求對象,你還可以基於原有的對象創建一個新的對象。 新的請求和舊的並沒有什麼不同,但你可以通過稍微調整配置對象,將其用於不同的場景。例如:

var req = new Request(URL, {method: 'GET', cache: 'reload'});
fetch(req).then(function(response) {
  return response.json();
}).then(function(json) {
  insertPhotos(json);
});

fetch和ajax 的主要區別

1、fetch()返回的promise將不會拒絕http的錯誤狀態,即使響應是一個HTTP 404或者500

2、在默認情況下 fetch不會接受或者發送cookies

fetch的配置

Promise fetch(String url [, Object options]);
Promise fetch(Request req [, Object options]);

Axios:

​ axios不是原生JS的,需要進行安裝,它不但可以在客戶端使用,而且可以在nodejs端使用。Axios也可以在請求和響應階段進行攔截。同樣也是基於promise對象的。

https://blog.csdn.net/Roselane_Begger/article/details/88936818

axios({
    method: 'post',
    url: '/user/12345',
    data: {
        firstName: 'Fred',
        lastName: 'Flintstone'
    }
})
.then(function (response) {
    console.log(response);
})
.catch(function (error) {
    console.log(error);
});

優缺點:

  • 從 node.js 創建 http 請求
  • 支持 Promise API
  • 客戶端支持防止CSRF
  • 提供了一些併發請求的接口(重要,方便了很多的操作)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章