5 個頂級的 JavaScript Ajax 元件和庫

2018-03-09    分類:WEB開發、程式設計開發、首頁精華0人評論發表於2018-03-09

本文由碼農網 – 小峰原創翻譯,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃

在這篇文章中,我們將介紹一些用於AJAX呼叫的最好的JS庫,包括jQuery,Axios和Fetch。歡迎檢視程式碼示例!

AJAX是用來對伺服器進行非同步HTTP呼叫的一系列web開發技術客戶端框架。 AJAX即Asynchronous JavaScript and XML(非同步JavaScript和XML)。AJAX曾是web開發界的一個常見名稱,許多流行的JavaScript小部件都是使用AJAX構建的。例如,有些特定的使用者互動(如按下按鈕)會非同步呼叫到伺服器,伺服器會檢索資料並將其返回給客戶端——所有這些都不需要重新載入網頁。

AJAX的現代化重新引入

JavaScript已經進化了,現在我們使用前端庫和/或如React、Angular、Vue等框架構建了動態的網站。AJAX的概念也經歷了重大變化,因為現代非同步JavaScript呼叫涉及檢索JSON而不是XML。有很多庫允許你從客戶端應用程式對伺服器進行非同步呼叫。有些進入到瀏覽器標準,有些則有很大的使用者基礎,因為它們不但靈活而且易於使用。有些支援promises,有些則使用回撥。在本文中,我將介紹用於從伺服器獲取資料的前5個AJAX庫。

Fetch API

Fetch API是XMLHttpRequest的現代替代品,用於從伺服器檢索資源。與XMLHttpRequest不同的是,它具有更強大的功能集和更有意義的命名。基於其語法和結構,Fetch不但靈活而且易於使用。但是,與其他AJAX HTTP庫區別開來的是,它具有所有現代Web瀏覽器的支援。Fetch遵循請求-響應的方法,也就是說,Fetch提出請求並返回解析到Response物件的promise。

你可以傳遞Request物件來獲取,或者,也可以僅傳遞要獲取的資源的URL。下面的示例演示了使用Fetch建立簡單的GET請求。

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

正如你所看到的,Fetch的then方法返回了一個響應物件,你可以使用一系列的then 進行進一步的操作。我使用.json() 方法將響應轉換為JSON並將其輸出到控制檯。

假如你需要POST表單資料或使用Fetch建立AJAX檔案上傳,將會怎麼樣?此時,除了Fetch之外,你還需要一個輸入表單,並使用FormData庫來儲存表單物件。

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文件中閱讀更多關於Fetch API的資訊。

Axios

Axios是一個基於XMLHttpRequest而構建的現代JavaScript庫,用於進行AJAX呼叫。它允許你從瀏覽器和伺服器發出HTTP請求。此外,它還支援ES6原生的Promise API。Axios的其他突出特點包括:

  • 攔截請求和響應。
  • 使用promise轉換請求和響應資料。
  • 自動轉換JSON資料。
  • 取消實時請求。

要使用Axios,你需要先安裝它。

npm install axios

下面是一個演示Axios行動的基本例子。

// 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的語法更簡單。讓我們做一些更復雜的事情,比如我們之前使用Fetch建立的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等現代庫的歡迎。

jQuery

jQuery曾經是JavaScript中的一個前線庫,用於處理從AJAX呼叫到操縱DOM內容的所有事情。雖然隨著其他前端庫的“衝擊”,其相關性有所降低,但你仍然可以使用jQuery來進行非同步呼叫。

如果你之前使用過jQuery,那麼這可能是最簡單的解決方案。但是,你將不得不匯入整個jQuery庫以使用$.ajax方法。雖然這個庫有特定於域的方法,例如$.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好的地方在於,如果你有疑問,那麼你可以找到大量的支援和文件。我發現了很多使用FormData()和jQuery進行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是一個輕量級和漸進式的AJAX庫,更側重於可讀性和靈活性。SuperAgent還擁有一個溫和的學習曲線,不像其他庫。它有一個針對Node.js API相同的模組。SuperAgent有一個接受GET、POST、PUT、DELETE和HEAD等方法的請求物件。然後你可以呼叫.then(),.end()或新的.await()方法來處理響應。例如,以下程式碼為使用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);

如果你有興趣瞭解更多關於SuperAgent的資訊,那麼它們有一系列很不錯的文件來幫助你開始這個旅程。

Request——簡化的HTTP客戶端

Request庫是進行HTTP呼叫最簡單的方法之一。結構和語法與在Node.js中處理請求的方式非常相似。目前,該專案在GitHub上有18K個星,值得一提的是,它是可用的最流行的HTTP庫之一。 下面是一個例子:

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.
});

結論

從客戶端進行HTTP呼叫在十年前可不是一件容易的事。前端開發人員不得不依賴於難以使用和實現的XMLHttpRequest。現代的庫和HTTP客戶端使得使用者互動、動畫、非同步檔案上傳等前端功能變得更加簡單。

我個人最喜歡的是Axios,因為我覺得它更易讀更賞心悅目。你也可以忠於Fetch,因為它文件化良好且有標準化的解決方案。

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

譯文連結:http://www.codeceo.com/article/5-javascript-ajax-libs.html
英文原文:Top JavaScript Libraries for Making AJAX Calls
翻譯作者:碼農網 – 小峰
轉載必須在正文中標註並保留原文連結、譯文連結和譯者等資訊。]

相關文章