以往一直認為異步請求只能使用原生js的XMLHttpRequest或jQuery的$.ajax()、$.post()等框架封裝的異步請求方法
原來js還提供fetch來替代XMLHttpRequest,詳情可見 https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch
fetch
規格不同於 jQuery.ajax()
主要有兩個方面牢記:
- 即使響應是HTTP 404或500,返回的Promise
fetch()
也不會拒絕HTTP錯誤狀態。相反,它將正常解析(ok
狀態設置為false),它只會拒絕網絡故障或阻止要求完成。 - 默認情況下, 如果站點依靠維護用戶會話(發送cookie,必須設置credentials init選項),
fetch
則不會發送或接收來自服務器的任何cookie,從而導致未經身份 驗證的請求。
1 fetch('https://api-to-call.com/endpoint').then(response => { 2 if(response.ok){ 3 return response.json(); 4 } 5 throw new Error('Request failed!'); 6 } , networkError => console.log(networkError.message) 7 ).then(jsonResponse => jsonResponse)