日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

“约见”面试官系列之常见面试题之第七十八篇之fetch(建议收藏)

發(fā)布時(shí)間:2023/12/10 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 “约见”面试官系列之常见面试题之第七十八篇之fetch(建议收藏) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

etch是一種HTTP數(shù)據(jù)請(qǐng)求的方式,是XMLHttpRequest的一種替代方案。fetch不是ajax的進(jìn)一步封裝,而是原生js。Fetch函數(shù)就是原生js,沒(méi)有使用XMLHttpRequest對(duì)象。

ajax

  • 使用步驟
    1.創(chuàng)建XmlHttpRequest對(duì)象
    2.調(diào)用open方法設(shè)置基本請(qǐng)求信息
    3.設(shè)置發(fā)送的數(shù)據(jù),發(fā)送請(qǐng)求
    4.注冊(cè)監(jiān)聽的回調(diào)函數(shù)
    5.拿到返回值,對(duì)頁(yè)面進(jìn)行更新
  • //1.創(chuàng)建Ajax對(duì)象if(window.XMLHttpRequest){var oAjax=new XMLHttpRequest();}else{var oAjax=new ActiveXObject("Microsoft.XMLHTTP");}//2.連接服務(wù)器(打開和服務(wù)器的連接)oAjax.open('GET', url, true);//3.發(fā)送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

  • 特點(diǎn)
    1、第一個(gè)參數(shù)是URL:
    2、第二個(gè)是可選參數(shù),可以控制不同配置的 init 對(duì)象
    3、使用了 JavaScript Promises 來(lái)處理結(jié)果/回調(diào):
  • fetch(url).then(response => response.json()).then(data => console.log(data)).catch(e => console.log("Oops, error", e))
  • 更酷的一點(diǎn)
    你可以通過(guò)Request構(gòu)造器函數(shù)創(chuàng)建一個(gè)新的請(qǐng)求對(duì)象,你還可以基于原有的對(duì)象創(chuàng)建一個(gè)新的對(duì)象。 新的請(qǐng)求和舊的并沒(méi)有什么不同,但你可以通過(guò)稍微調(diào)整配置對(duì)象,將其用于不同的場(chǎng)景。例如:

上面的代碼中我們指明了請(qǐng)求使用的方法為GET,并且指定不緩存響應(yīng)的結(jié)果,你可以基于原有的GET請(qǐng)求創(chuàng)建一個(gè)POST請(qǐng)求,它們具有相同的請(qǐng)求源。代碼如下:

fetch封裝

export default async(url = '', data = {}, type = 'GET', method = 'fetch') => {type = type.toUpperCase();url = baseUrl + url;if (type == 'GET') {let dataStr = ''; //數(shù)據(jù)拼接字符串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',//為了在當(dāng)前域名內(nèi)自動(dòng)發(fā)送 cookie , 必須提供這個(gè)選項(xiàng)method: type,headers: {'Accept': 'application/json','Content-Type': 'application/json'},mode: "cors",//請(qǐng)求的模式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)}}}})} }

本面試題為前端常考面試題,后續(xù)有機(jī)會(huì)繼續(xù)完善。我是歌謠,一個(gè)沉迷于故事的講述者。

歡迎一起私信交流。

“睡服“面試官系列之各系列目錄匯總(建議學(xué)習(xí)收藏)?

總結(jié)

以上是生活随笔為你收集整理的“约见”面试官系列之常见面试题之第七十八篇之fetch(建议收藏)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。