“约见”面试官系列之常见面试题之第七十八篇之fetch(建议收藏)
生活随笔
收集整理的這篇文章主要介紹了
“约见”面试官系列之常见面试题之第七十八篇之fetch(建议收藏)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
etch是一種HTTP數據請求的方式,是XMLHttpRequest的一種替代方案。fetch不是ajax的進一步封裝,而是原生js。Fetch函數就是原生js,沒有使用XMLHttpRequest對象。
ajax
- 使用步驟
1.創建XmlHttpRequest對象
2.調用open方法設置基本請求信息
3.設置發送的數據,發送請求
4.注冊監聽的回調函數
5.拿到返回值,對頁面進行更新 - //1.創建Ajax對象if(window.XMLHttpRequest){var oAjax=new XMLHttpRequest();}else{var oAjax=new ActiveXObject("Microsoft.XMLHTTP");}//2.連接服務器(打開和服務器的連接)oAjax.open('GET', url, true);//3.發送oAjax.send();//4.接收oAjax.onreadystatechange=function (){if(oAjax.readyState==4){if(oAjax.status==200){//alert('成功了:'+oAjax.responseText);fnSucc(oAjax.responseText);}else{//alert('失敗了');if(fnFaild){fnFaild();}}}};
fetch
- 特點
1、第一個參數是URL:
2、第二個是可選參數,可以控制不同配置的 init 對象
3、使用了 JavaScript Promises 來處理結果/回調: - fetch(url).then(response => response.json()).then(data => console.log(data)).catch(e => console.log("Oops, error", e))
- 更酷的一點
你可以通過Request構造器函數創建一個新的請求對象,你還可以基于原有的對象創建一個新的對象。 新的請求和舊的并沒有什么不同,但你可以通過稍微調整配置對象,將其用于不同的場景。例如:
上面的代碼中我們指明了請求使用的方法為GET,并且指定不緩存響應的結果,你可以基于原有的GET請求創建一個POST請求,它們具有相同的請求源。代碼如下:
fetch封裝
export default async(url = '', data = {}, type = 'GET', method = 'fetch') => {type = type.toUpperCase();url = baseUrl + url;if (type == 'GET') {let dataStr = ''; //數據拼接字符串Object.keys(data).forEach(key => {dataStr += key + '=' + data[key] + '&';})if (dataStr !== '') {dataStr = dataStr.substr(0, dataStr.lastIndexOf('&'));url = url + '?' + dataStr;}}if (window.fetch && method == 'fetch') {let requestConfig = {credentials: 'include',//為了在當前域名內自動發送 cookie , 必須提供這個選項method: type,headers: {'Accept': 'application/json','Content-Type': 'application/json'},mode: "cors",//請求的模式cache: "force-cache"}if (type == 'POST') {Object.defineProperty(requestConfig, 'body', {value: JSON.stringify(data)})}try {const response = await fetch(url, requestConfig);const responseJson = await response.json();return responseJson} catch (error) {throw new Error(error)}} else {return new Promise((resolve, reject) => {let requestObj;if (window.XMLHttpRequest) {requestObj = new XMLHttpRequest();} else {requestObj = new ActiveXObject;}let sendData = '';if (type == 'POST') {sendData = JSON.stringify(data);}requestObj.open(type, url, true);requestObj.setRequestHeader("Content-type", "application/x-www-form-urlencoded");requestObj.send(sendData);requestObj.onreadystatechange = () => {if (requestObj.readyState == 4) {if (requestObj.status == 200) {let obj = requestObj.responseif (typeof obj !== 'object') {obj = JSON.parse(obj);}resolve(obj)} else {reject(requestObj)}}}})} }本面試題為前端常考面試題,后續有機會繼續完善。我是歌謠,一個沉迷于故事的講述者。
歡迎一起私信交流。
“睡服“面試官系列之各系列目錄匯總(建議學習收藏)?
總結
以上是生活随笔為你收集整理的“约见”面试官系列之常见面试题之第七十八篇之fetch(建议收藏)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS申请真机调试证书 图文详解
- 下一篇: 小学计算机课的微案例,全国中小学信息技术