溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

5 個(gè)頂級的 JavaScript Ajax 組件和庫

發(fā)布時(shí)間:2020-07-03 17:29:29 來源:網(wǎng)絡(luò) 閱讀:371 作者:戴小小小媱 欄目:web開發(fā)

在這篇文章中,我們將介紹一些用于AJAX調(diào)用的最好的JS庫,包括jQuery,Axios和Fetch。歡迎查看代碼示例!

AJAX是用來對服務(wù)器進(jìn)行異步HTTP調(diào)用的一系列web開發(fā)技術(shù)客戶端框架。 AJAX即Asynchronous JavaScript and XML(異步JavaScript和XML)。AJAX曾是web開發(fā)界的一個(gè)常見名稱,許多流行的JavaScript小部件都是使用AJAX構(gòu)建的。例如,有些特定的用戶交互(如按下按鈕)會(huì)異步調(diào)用到服務(wù)器,服務(wù)器會(huì)檢索數(shù)據(jù)并將其返回給客戶端——所有這些都不需要重新加載網(wǎng)頁。

5 個(gè)頂級的 JavaScript Ajax 組件和庫

AJAX的現(xiàn)代化重新引入
JavaScript已經(jīng)進(jìn)化了,現(xiàn)在我們使用前端庫和/或如React、Angular、Vue等框架構(gòu)建了動(dòng)態(tài)的網(wǎng)站。AJAX的概念也經(jīng)歷了重大變化,因?yàn)楝F(xiàn)代異步JavaScript調(diào)用涉及檢索JSON而不是XML。有很多庫允許你從客戶端應(yīng)用程序?qū)Ψ?wù)器進(jìn)行異步調(diào)用。有些進(jìn)入到瀏覽器標(biāo)準(zhǔn),有些則有很大的用戶基礎(chǔ),因?yàn)樗鼈儾坏`活而且易于使用。有些支持promises,有些則使用回調(diào)。在本文中,我將介紹用于從服務(wù)器獲取數(shù)據(jù)的前5個(gè)AJAX庫。

Fetch API
Fetch API是XMLHttpRequest的現(xiàn)代替代品,用于從服務(wù)器檢索資源。與XMLHttpRequest不同的是,它具有更強(qiáng)大的功能集和更有意義的命名?;谄湔Z法和結(jié)構(gòu),F(xiàn)etch不但靈活而且易于使用。但是,與其他AJAX HTTP庫區(qū)別開來的是,它具有所有現(xiàn)代Web瀏覽器的支持。Fetch遵循請求-響應(yīng)的方法,也就是說,F(xiàn)etch提出請求并返回解析到Response對象的promise。
你可以傳遞Request對象來獲取,或者,也可以僅傳遞要獲取的資源的URL。下面的示例演示了使用Fetch創(chuàng)建簡單的GET請求。


fetch('https://www.example.com', {
        method: 'get'
    })
    .then(response => response.json())
    .then(jsonData => console.log(jsonData))
    .catch(err => {
            //error block
     })

正如你所看到的,F(xiàn)etch的then方法返回了一個(gè)響應(yīng)對象,你可以使用一系列的then 進(jìn)行進(jìn)一步的操作。我使用.json() 方法將響應(yīng)轉(zhuǎn)換為JSON并將其輸出到控制臺(tái)。

假如你需要POST表單數(shù)據(jù)或使用Fetch創(chuàng)建AJAX文件上傳,將會(huì)怎么樣?此時(shí),除了Fetch之外,你還需要一個(gè)輸入表單,并使用FormData庫來存儲(chǔ)表單對象。

var input = document.querySelector('input[type="file"]')
var data = new FormData()
data.append('file', input.files[0])
data.append('user', 'blizzerand')
fetch('/avatars', {
    method: 'POST',
    body: data
})

你可以在官方的Mozilla web文檔中閱讀更多關(guān)于Fetch API的信息。

Axios
Axios是一個(gè)基于XMLHttpRequest而構(gòu)建的現(xiàn)代JavaScript庫,用于進(jìn)行AJAX調(diào)用。它允許你從瀏覽器和服務(wù)器發(fā)出HTTP請求。此外,它還支持ES6原生的Promise API。Axios的其他突出特點(diǎn)包括:

攔截請求和響應(yīng)。
使用promise轉(zhuǎn)換請求和響應(yīng)數(shù)據(jù)。
自動(dòng)轉(zhuǎn)換JSON數(shù)據(jù)。
取消實(shí)時(shí)請求。
要使用Axios,你需要先安裝它。

npm install axios
下面是一個(gè)演示Axios行動(dòng)的基本例子。

// Make a request for a user with a given ID
axios.get('/user?ID=12345')
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

與Fetch相比,Axios的語法更簡單。讓我們做一些更復(fù)雜的事情,比如我們之前使用Fetch創(chuàng)建的AJAX文件上傳器。

var data = new FormData();
   data.append('foo', 'bar');
   data.append('file', document.getElementById('file').files[0]);
   var config = {
        onUploadProgress: function(progressEvent) {
          var percentCompleted = Math.round( (progressEvent.loaded * 100) / progressEvent.total );
        }
    };
    axios.put('/upload/server', data, config)
      .then(function (res) {
        output.className = 'container';
        output.innerHTML = res.data;
      })
      .catch(function (err) {
        output.className = 'container text-danger';
        output.innerHTML = err.message;
      });

Axios更具可讀性。Axios也非常受React和Vue等現(xiàn)代庫的歡迎。

jQuery
jQuery曾經(jīng)是JavaScript中的一個(gè)前線庫,用于處理從AJAX調(diào)用到操縱DOM內(nèi)容的所有事情。雖然隨著其他前端庫的“沖擊”,其相關(guān)性有所降低,但你仍然可以使用jQuery來進(jìn)行異步調(diào)用。

如果你之前使用過jQuery,那么這可能是最簡單的解決方案。但是,你將不得不導(dǎo)入整個(gè)jQuery庫以使用$.ajax方法。雖然這個(gè)庫有特定于域的方法,例如$.getJSON,$.get和$.post,但是其語法并不像其他的AJAX庫那么簡單。以下代碼用于編寫基本的GET請求。

$.ajax({
  url: '/users',
  type: "GET",
  dataType: "json",
  success: function (data) {
      console.log(data);
  }
  fail: function () {
      console.log("Encountered an error")
  }
});

jQuery好的地方在于,如果你有疑問,那么你可以找到大量的支持和文檔。我發(fā)現(xiàn)了很多使用FormData()和jQuery進(jìn)行AJAX文件上傳的例子。下面是最簡單的方法:

var formData = new FormData();
formData.append('file', $('#file')[0].files[0]);
$.ajax({
       url : 'upload.php',
       type : 'POST',
       data : formData,
       processData: false,  // tell jQuery not to process the data
       contentType: false,  // tell jQuery not to set contentType
       success : function(data) {
           console.log(data);
           alert(data);
       }
});

SuperAgent
SuperAgent是一個(gè)輕量級和漸進(jìn)式的AJAX庫,更側(cè)重于可讀性和靈活性。SuperAgent還擁有一個(gè)溫和的學(xué)習(xí)曲線,不像其他庫。它有一個(gè)針對Node.js API相同的模塊。SuperAgent有一個(gè)接受GET、POST、PUT、DELETE和HEAD等方法的請求對象。然后你可以調(diào)用.then(),.end()或新的.await()方法來處理響應(yīng)。例如,以下代碼為使用SuperAgent的簡單GET請求。

request
   .post('/api/pet')
   .send({ name: 'Manny', species: 'cat' })
   .set('X-API-Key', 'foobar')
   .set('Accept', 'application/json')
   .then(function(res) {
      alert('yay got ' + JSON.stringify(res.body));
   });

如果你想要做更多的事情,比如使用此AJAX庫上傳文件,那該怎么做呢? 同樣超級easy。

request
   .post('/upload')
   .field('user[name]', 'Tobi')
   .field('user[email]', 'tobi@learnboost.com')
   .field('friends[]', ['loki', 'jane'])
   .attach('image', 'path/to/tobi.png')
   .then(callback);

如果你有興趣了解更多關(guān)于SuperAgent的信息,那么它們有一系列很不錯(cuò)的文檔來幫助你開始這個(gè)旅程。

Request——簡化的HTTP客戶端
Request庫是進(jìn)行HTTP調(diào)用最簡單的方法之一。結(jié)構(gòu)和語法與在Node.js中處理請求的方式非常相似。目前,該項(xiàng)目在GitHub上有18K個(gè)星,值得一提的是,它是可用的最流行的HTTP庫之一。 下面是一個(gè)例子:

var request = require('request');
request('http://www.google.com', function (error, response, body) {
  console.log('error:', error); // Print the error if one occurred
  console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
  console.log('body:', body); // Print the HTML for the Google homepage.
});

結(jié)論
從客戶端進(jìn)行HTTP調(diào)用在十年前可不是一件容易的事。前端開發(fā)人員不得不依賴于難以使用和實(shí)現(xiàn)的XMLHttpRequest?,F(xiàn)代的庫和HTTP客戶端使得用戶交互、動(dòng)畫、異步文件上傳等前端功能變得更加簡單。

我個(gè)人最喜歡的是Axios,因?yàn)槲矣X得它更易讀更賞心悅目。你也可以忠于Fetch,因?yàn)樗臋n化良好且有標(biāo)準(zhǔn)化的解決方案。

你個(gè)人最喜歡的AJAX庫是哪個(gè)? 歡迎各位分享你的看法。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI