當前位置:成語大全網 - 書法字典 - 嗯,妳還在用Ajax嗎?去拿,去了解它

嗯,妳還在用Ajax嗎?去拿,去了解它

“妳此刻是在沙漠中,所以妳應該把註意力集中在沙漠上。沙漠和世界上的其他事物壹樣,可以用來了解世界。妳甚至不用了解沙漠,只需觀察普通的沙粒,就能從中看出世間萬物的神奇。——《壹個牧童的人生旅程》。

Fetch API提供了獲取資源(包括跨域請求)的接口。任何使用過XMLHttpRequest的人都可以輕松上手,新的API提供了更強大、更靈活的特性集。

Fetch提供了請求和響應、頭(以及其他與網絡請求相關的對象)的壹般定義。

Fetch()必須接受壹個參數——資源的路徑。無論請求成功與否,都返回壹個Promise對象,resolve對應請求的響應。還可以傳遞可選的第二個參數init。

壹旦返回了響應,您可以使用壹些方法來定義內容的形式以及如何處理它。您也可以通過request()和response()的構造函數直接創建請求和響應,但不建議這樣做。

Fetch API提供了壹個JavaScript接口,用於訪問和操作HTTP管道的某些特定部分,比如請求和響應。它還提供了壹個全局fetch()方法,該方法提供了壹種簡單而合理的方式來通過網絡異步獲取資源。

Fetch規範和jQuery.ajax()主要有以下區別:

在使用中,fetch()接受URL字符串作為參數,默認情況下向URL發送GET請求,並返回Promise對象。

這裏我們用節點環境來學習,當然在瀏覽器中比較有可比性,需要安裝基於節點的依賴包node-fetch,所以這裏壹定要註意版本問題。

同時,我們需要壹個Web服務來進行測試。這裏我們用python構建了壹個簡單的Web服務。

Data.json文件

準備工作完成後,我們開始愉快地學習吧。

基本的獲取請求很容易設置。請看下面的代碼:

這是從服務器獲取JSON數據的回調式請求。節點環境中的演示

fetch()收到的響應是壹個流對象,response.json()是壹個異步操作,把所有的內容取出來,變成json對象。

整理起來,和axios差不多。相似之處都是基於ES 6的無極對象。在節點環境下,它們都是基於HTTP模塊的。不同的是,axios基於XMLHttpRequest在瀏覽器中實現異步通信,fetch是壹個新的API,是XMLHttpRequest最新的替代技術。這裏有壹個axios的例子。

Promise可以用await語法重寫,使語義更加清晰。

Await語句必須放在try中...catch,以便捕獲異步操作中可能出現的錯誤。

fetch()請求成功後,您將獲得壹個響應對象。它對應於服務器的HTTP響應。

響應包含de synchronization屬性,該屬性對應於HTTP響應的頭,可以立即讀取。

response.ok:屬性返回指示請求是否成功的布爾值,其中true對應於HTTP請求的狀態代碼200到299,false對應於其他狀態代碼。

Response.status:該屬性返回壹個數字,指示HTTP響應的狀態代碼(例如,200,指示請求成功)。

Response.statusText:該屬性返回壹個字符串,指示HTTP響應的狀態信息(例如,請求成功後,服務器返回“OK”)。

Response.url:該屬性返回請求的url。如果URL中有跳轉,此屬性將返回最終的URL。

response.type:屬性返回請求的類型。可能的值如下:

我們在python的web服務接口中拋出壹個異常,然後直接進行catch。

執行錯誤:內部服務器錯誤,即500

修改接口返回的狀態碼是400。

報告錯誤請求

妳也可以直接根據反應來判斷

修改接口返回的狀態碼是404。

響應對象也有響應。Headers屬性,它指向對應於HTTP響應的所有頭的headers對象。

可以使用for遍歷標頭對象...循環的。

Headers對象提供下列方法來操作標題。HTTP響應,修改頭意義不大。

響應對象根據服務器返回的數據類型不同,提供不同的讀取方式。讀取方法是異步的,返回的都是Promise對象。您必須等到異步操作結束後,才能獲得服務器返回的完整數據。

response.text()可用於獲取文本數據,如HTML文件。」

" response.json()主要用於獲取服務器返回的json數據."

“response.formData()主要用在Service Worker中截取用戶提交的表單,修改壹些數據後再提交給服務器。」

“response.blob()用於獲取二進制文件。」

Response.arrayBuffer()主要用於獲取流媒體文件。

流對象只能讀壹次,然後就沒了。這意味著只能使用上壹節的五種讀取方法中的壹種,否則會報錯。

響應對象提供Response.clone()方法來創建響應對象的副本,實現多次讀取。

響應對象還有壹個Response.redirect()方法,用於將響應結果重定向到指定的URL。這種方法壹般只在服務人員中使用。

Response.body屬性是Response對象公開的底層接口,返回ReadableStream對象供用戶操作。

它可以用來讀取塊中的內容,它的應用之壹是顯示下載的進度。

fetch()的第壹個參數是URL,您也可以接受第二個參數作為配置對象來自定義HTTP請求。

HTTP請求的方法、頭和數據體都在這個對象中設置。

fetch()請求發出後,如果想中途取消,需要使用AbortController對象。

請求休眠10s,在5s終止請求,創建壹個新的AbortController實例,然後發送fetch()請求。configuration對象的signal屬性必須指定它接收由AbortController實例發送的信號controller.signal。

controller.abort()方法用於發出取消信號。此時,中止事件將被觸發。這個事件可以被監控,也可以通過controller.signal.aborted屬性判斷取消信號是否已經發出。

"節點環境"

Python環境