fetch請求


Fetch API 提供了一個 JavaScript 接口,用於訪問和操縱 HTTP 管道的一些具體部分,例如請求和響應。它還提供了一個全局 fetch() 方法,該方法提供了一種簡單,合理的方式來跨網絡異步獲取資源。

這種功能以前是使用 XMLHttpRequest 實現的。Fetch 提供了一個更理想的替代方案,可以很容易地被其他技術使用,例如  Service Workers (en-US)。Fetch 還提供了專門的邏輯空間來定義其他與 HTTP 相關的概念,例如 CORS 和 HTTP 的擴展。

請注意,fetch 規范與 jQuery.ajax() 主要有三種方式的不同:

  • 當接收到一個代表錯誤的 HTTP 狀態碼時,從 fetch() 返回的 Promise 不會被標記為 reject, 即使響應的 HTTP 狀態碼是 404 或 500。相反,它會將 Promise 狀態標記為 resolve (但是會將 resolve 的返回值的 ok 屬性設置為 false ),僅當網絡故障時或請求被阻止時,才會標記為 reject。
  • fetch() 可以不會接受跨域 cookies;你也可以不能使用 fetch() 建立起跨域會話。其他網站的 Set-Cookie 頭部字段將會被無視。
  • fetch 不會發送 cookies。除非你使用了credentials 的初始化選項。

基本使用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        async function readFile(){
        const data = await fetch("./text.txt").then(e=>e.text());
        console.log(data);
      }
      readFile()
       </script>
      
</body>
</html>

 

 

注意:

  • fetch一般都是用在瀏覽器端的,少用在node端
  • 服務器端使用,本地運行會報錯

 

 

 

 此時我們看上面代碼,fetch返回的是一個promise對象,就可以通過.then來進行獲取操作,內部的e.text()指的獲取text文本

一共有幾種數據格式?

  •  arrayBuffer()
  •  blob()
  •  json()
  •  text()
  •  formData()

常用就是json()和text()

看一下使用json獲取

此時我們新建一個1.json文件,獲取a的值

 <script>
        async function readFile(){
          const {a} = await fetch("./1.json").then(data=>data.json());
          console.log(a);
        }
        readFile()
      </script>   

 

 

 總結:fetch返回的是promise對象,一般是在瀏覽器端使用,發送請求,支持多種請求,有不同的方法獲取body返回值,大多數用的是text和json方法

fetch的優缺點

為什么要用fetch,原生的XMLHttpRequest是一個很笨重的實現,沒有整體的封裝性,配置和調用方式很混亂

我們看一下下面的代碼

<script>
        var xhr = new XMLHttpRequest();
        xhr.open("GET","http://www.baidu.com")

        xhr.onload = function(){
          console.log(xhr.response);
        }
        xhr.send()
      </script> 

fetch是JavaScript的語言封裝,是對XMLHttpRequest封裝,不是第三方庫的封裝,不同於jquery的ajax

fetch也有自己的規定,兼容性不好,大多數使用在瀏覽器端,如果想要在node中使用,只用原生的api是不支持,得引用第三方插件node-fetch

fetch和jquery的區別

  • 當接收到一個代表錯誤的 HTTP 狀態碼時,從 fetch() 返回的 Promise 不會被標記為 reject, 即使響應的 HTTP 狀態碼是 404 或 500。相反,它會將 Promise 狀態標記為 resolve (但是會將 resolve 的返回值的 ok 屬性設置為 false ),僅當網絡故障時或請求被阻止時,才會標記為 reject。
  • fetch() 可以接受跨域 cookies;也可以使用 fetch() 建立起跨域會話。
  • fetch 不會發送 cookies。除非你使用了credentials 的初始化選項。

 fetch的請求

fetch默認的請求是get請求,如果發送post請求,需要配置body信息

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <button>按我發送請求</button>
  <script src="./jquery.min.js"></script>
  <script>
    $("button").click(function(){
      fetch("fetch_methods",{
        // 請求方式
        method: "post",
        // 請求頭部信息
        headers:{
          "content-type":'application/json'
        },
        // 攜帶參數
        body: "name=小明&age=12"
      }).then(data=>{data})
      .catch(err=>{
        console.log("錯誤信息",err);
      })
    })
  </script>
</body>
</html>

 

 如果是post請求,此時需要第二個參數為對象,method表示請求方式,header是請求頭部信息,body是上行請求攜帶的參數

 


免責聲明!

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



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