在前端開發中,我們經常會需要對用戶的操作做出響應。而JavaScript的響應攔截機制則是實現這一目的的常用手段。響應攔截是指在請求返回后,通過攔截響應結果并作出相應處理的技術。
下面舉一個栗子,假設我們需要從服務器上請求一個商品列表并在前端展示,那么我們可以通過以下JS代碼來實現:
fetch('/api/goods') .then(response =>response.json()) .then(data =>showGoods(data))
在這段代碼中,通過fetch函數向后端發送了一個請求,返回一個Promise對象。通過Promise可以獲得響應的結果,并通過then()方法做出相應的處理。其中response是接收到的響應,使用json()方法可以將其轉換為JSON格式對象,然后調用showGoods()函數將數據展示在頁面上。
在響應攔截中,我們可以通過攔截響應結果來實現需要的功能。下面是一個示例代碼:
fetch('/api/goods') .then(response =>{ if (response.status === 200) { return response } else { throw new Error('response status is not 200') } }) .then(response =>response.json()) .then(data =>showGoods(data)) .catch(error =>console.log(error))
在這個例子中,我們攔截了響應結果。如果響應的狀態碼是200(成功),那么我們返回響應結果。如果狀態碼不符合條件,則使用throw拋出一個錯誤。在之后的處理流程中,我們使用catch()方法捕獲錯誤并打印到控制臺中。
需要注意的是,fetch返回的響應結果是一個只讀的對象,我們無法直接修改它。如果需要修改響應結果,我們可以將它復制到一個新的對象中并對它進行修改:
fetch('/api/goods') .then(response =>{ const newResponse = new Response('new data') return newResponse }) .then(response =>response.text()) .then(data =>console.log(data))
在這個例子中,我們將fetch獲得的響應結果賦值給一個新的對象newResponse,并在then()方法中使用了它。在showData()函數中,我們打印出了'new data'。
響應攔截機制是一個非常方便的工具,可以幫助我們在前端開發中進行一系列的操作,并使代碼更加簡單易懂。但需要注意的是,在響應攔截中我們應該避免對數據進行修改,否則可能會影響到后續的操作。