fetch 資源請求


簡介:fetch() 方法用於發起獲取資源的請求。它返回一個 promise,這個 promise 會在請求響應后被 resolve,並傳回 Response 對象。

為了更好的體驗,可點擊這里閱讀

XMLHttpRequest的痛

我們使用ajax久矣,最熟悉的莫過於經過jQuery封裝的ajax對象,因為簡單好用。
經過封裝打扮的ajax固然漂亮,可是我們都明白底層是怎么回事。對於主流瀏覽器是 XMLHttpRequest,對於低版本IE是 ActiveXObject
所以,對於傳統ajax使用,我們首先得統一 請求對象:

 1 function ajaxFunction()
 2  {
 3  var xmlHttp;
 4  
 5  try
 6     {
 7    // Firefox, Opera 8.0+, Safari
 8     return xmlHttp=new XMLHttpRequest();
 9     }
10  catch (e)
11     {
12 
13   // Internet Explorer
14    try
15       {
16       return xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
17       }
18    catch (e)
19       {
20 
21       try
22          {
23          return xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
24          }
25       catch (e)
26          {
27          alert("您的瀏覽器不支持AJAX!");
28          return false;
29          }
30       }
31     }
32  }

然后使用依然隱隱作痛:

 1 var xhr = ajaxFunction();
 2 var url = "http://xxxx.xxx/api/xxxx"
 3 xhr.open('GET', url);
 4 xhr.responseType = 'json';
 5 
 6 xhr.onload = function() {
 7   console.log(xhr.response);
 8 };
 9 
10 xhr.onerror = function() {
11   console.log("Oops, error");
12 };
13 
14 xhr.send();

誠如是,XMLHttpRequest 的設計確實有點粗糙難用,配置和調用方式非常混亂,而且異步回調,沒有Promise對象的模式。

fetch簡介

官方解釋:

  • fetch() 方法用於發起獲取資源的請求。它返回一個 promise,這個 promise 會在請求響應后被 resolve,並傳回 Response 對象。

  • Window 和 WorkerGlobalScope 都實現了 GlobalFetch — 這意味着基本在任何場景下只要你想獲取資源,都可以使用 fetch() 方法。

  • 當遇到網絡錯誤時,fetch() 返回的 promise 會被 reject,並傳回 TypeError,雖然這也可能因為權限或其它問題導致。成功的 fetch() 檢查不僅要包括 promise 被 resolve,還要包括 Response.ok 屬性為 true。HTTP 404 狀態並不被認為是網絡錯誤。

語法:

fetch(input, init).then(function(response) { ... });

參數

    • input
      定義要獲取的資源。這可能是:
      • 一個 USVString 字符串,包含要獲取資源的 URL。
      • 一個 Request 對象。
    • init 可選
      一個配置項對象,包括所有對請求的設置。可選的參數有:
      • method: 請求使用的方法,如 GET、POST。
      • headers: 請求的頭信息,形式為 Headers 對象或 ByteString。
      • body: 請求的 body 信息:可能是一個 Blob、BufferSource、FormData、URLSearchParams * 或者 USVString 對象。注意 GET 或 HEAD 方法的請求不能包含 body 信息。
      • mode: 請求的模式,如 cors、 no-cors 或者 same-origin。
      • credentials: 請求的 credentials,如 omit、same-origin 或者 include。
      • cache: 請求的 cache 模式: default, no-store, reload, no-cache, force-cache, or only-if-cached.
    • 返回值
      一個 Promise,resolve 時回傳 Response 對象。

兼容性:

 

fetch基本使用

 1 var url = "xxxxxx";
 2 fetch(url).then(function(response) {
 3     console.log(response)
 4     if (response.status !== 200) {
 5         console.log("request " + url + "error! status: " + response.status);
 6         return;
 7     }
 8     return response.json();
 9 }).then(function(data) {
10     console.log(data);
11 }).catch(function(e) {
12     console.log("error");
13 });

如果你有做測試的話,可以看到 console.log(response) 打印出的信息,包含請求狀態,請求頭,請求體等等。
另外調用 response.json()方法返回依然是一個 Promise對象,所以,可以如下使用:

1 response.json().then(function (data){
2       // do something
3 })

另外還有 第一個參數是 Request對象的使用方法,這里不做闡述。

參考資料

fetch mdn


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM