前端理論面試- 請(qǐng)求數(shù)據(jù)深度探究

最近總是去面試亩歹,結(jié)果都掛掉了匙监,失去了生活的希望,好想去遠(yuǎn)方小作。亭姥。。
無(wú)奈還欠著太多貸款顾稀,還沒(méi)有結(jié)婚生娃达罗,之后咬著牙,留著淚静秆,繼續(xù)學(xué)習(xí)吧粮揉。

1.前端通過(guò)ajax請(qǐng)求數(shù)據(jù),不用ajax還可以用什么完成請(qǐng)求呢抚笔?

答:基本都是用ajax請(qǐng)求數(shù)據(jù)扶认,ajax就是原生的XmlHttpRequest對(duì)象,jQuery中的請(qǐng)求也是對(duì)原生ajax進(jìn)行封裝殊橙,axios也是對(duì)原生ajax的進(jìn)行封裝辐宾,如果不用ajax的話(huà),估計(jì)就只有jsonp了膨蛮,或者是HTML文件模式了叠纹。
這個(gè)樣面試官有點(diǎn)不太滿(mǎn)意,實(shí)際的開(kāi)發(fā)基本都是ajax敞葛,易用性和兼容性都是ajax比較好誉察,面試嘛,要托管自己的知識(shí)面惹谐,其實(shí)不用ajax持偏,jsonp應(yīng)該是唯一馬上想到的,現(xiàn)在我百度一下豺鼻、综液、、
牛掰:前端使用ajax請(qǐng)求數(shù)據(jù)易用性和兼容性都是比較好的儒飒,基本一下第三方庫(kù)都是對(duì)ajax的二次封裝谬莹,如axios,jQuery等桩了。不用ajax的話(huà)附帽,jsonp是一個(gè)比較好的選擇,但jsonp對(duì)post請(qǐng)求的支持不太友好井誉,但同時(shí)也可以利用HTMLfrom表單形式提交post請(qǐng)求蕉扮,jsonp原理也是源于HTML script標(biāo)簽的src屬性。還有現(xiàn)在ES6-fetchAPI來(lái)獲取數(shù)據(jù)颗圣,fetch請(qǐng)求數(shù)據(jù)直接返回的就是一個(gè)pormise實(shí)例喳钟,易用性更強(qiáng)屁使,但兼容性不夠。然后HTML5還提供了websocket請(qǐng)求數(shù)據(jù)方式奔则,對(duì)于實(shí)時(shí)通信良好支持亦镶,同時(shí)需要服務(wù)端提供socket服務(wù)器煌寇,服務(wù)api請(qǐng)求方式是以ws或wss協(xié)議請(qǐng)求方式雕憔。
前端請(qǐng)求數(shù)據(jù)的方式萧吠?前端請(qǐng)求數(shù)據(jù)的幾種方式?

一. ajax原理:

AJAX的全稱(chēng)是Asynchronous JavaScript And XML.

使用ajax發(fā)送請(qǐng)求是依靠于一個(gè)對(duì)象抽莱,叫XmlHttpRequest對(duì)象范抓,通過(guò)這個(gè)對(duì)象我們可以從服務(wù)器獲取到數(shù)據(jù),然后再渲染到我們的頁(yè)面上∈愁恚現(xiàn)在幾乎所有的瀏覽器都有這個(gè)對(duì)象匕垫,只有IE7以下的沒(méi)有,而是通過(guò)ActiveXObject這個(gè)對(duì)象來(lái)創(chuàng)建的璃岳。XmlHttpRequest對(duì)象有一些常見(jiàn)的方法:

方法 描述
abort() 停止當(dāng)前請(qǐng)求
getAllResponseHeaders() 把HTTP請(qǐng)求的所有響應(yīng)首部作為鍵/值對(duì)返回
getResponseHeader(“header”) 返回指定首部的串值
open(method,url) 建立對(duì)服務(wù)器的調(diào)用,還有3個(gè)可選參數(shù)年缎,是否異步、用戶(hù)名铃慷、密碼
send(content) 向服務(wù)器發(fā)送請(qǐng)求
setRequestHeader(header, value) 把指定首部設(shè)置為所提供的值单芜。

XMLHttpRequest對(duì)象
當(dāng)需要異步與服務(wù)器交換數(shù)據(jù)時(shí),需要XMLHttpRequest對(duì)象來(lái)異步交換犁柜。XMLHttpRequest對(duì)象的主要屬性有:
onreadystatechange——每次狀態(tài)改變所觸發(fā)事件的事件處理程序洲鸠。
responseText——從服務(wù)器進(jìn)程返回?cái)?shù)據(jù)的字符串形式。
responseXML——從服務(wù)器進(jìn)程返回的DOM兼容的文檔數(shù)據(jù)對(duì)象馋缅。
status——從服務(wù)器返回的數(shù)字代碼扒腕,如404(未找到)和200(已就緒)。
status Text——伴隨狀態(tài)碼的字符串信息萤悴。
readyState——對(duì)象狀態(tài)值瘾腰。對(duì)象狀態(tài)值有以下幾個(gè):
0 - (未初始化)還沒(méi)有調(diào)用send()方法
1 - (載入)已調(diào)用send()方法,正在發(fā)送請(qǐng)求
2 - (載入完成)send()方法執(zhí)行完成
3 - (交互)正在解析響應(yīng)內(nèi)容
4 - (完成)響應(yīng)內(nèi)容解析完成覆履,可以在客戶(hù)端調(diào)用了
對(duì)于readyState的狀態(tài)值蹋盆,其中“0”狀態(tài)是在定義后自動(dòng)具有的狀態(tài)值,而對(duì)于成功訪(fǎng)問(wèn)的狀態(tài)(得到信息)我們大多數(shù)采用“4”進(jìn)行判斷硝全。

ajax優(yōu)缺點(diǎn)
優(yōu)缺點(diǎn) 描述
優(yōu)點(diǎn) 局部更新
優(yōu)點(diǎn) 通過(guò)異步模式栖雾,提升了用戶(hù)體驗(yàn)
優(yōu)點(diǎn) 原生支持,不需要任何插件
缺點(diǎn) 可能破壞瀏覽器后退功能
缺點(diǎn) 嵌套回調(diào)伟众,難以處理

示例: 請(qǐng)看 原生ajax使用實(shí)現(xiàn)

二. JSONP原理

ajax請(qǐng)求受同源策略影響析藕,不允許進(jìn)行跨域請(qǐng)求,而script標(biāo)簽src屬性中的鏈接卻可以訪(fǎng)問(wèn)跨域的js腳本凳厢,利用這個(gè)特性账胧,服務(wù)端不再返回JSON格式的數(shù)據(jù)竞慢,而是返回一段調(diào)用某個(gè)函數(shù)的js代碼,在src中進(jìn)行了調(diào)用治泥,這樣實(shí)現(xiàn)了跨域梗顺。

優(yōu)缺點(diǎn) 描述
優(yōu)點(diǎn) 進(jìn)行跨域請(qǐng)求
缺點(diǎn) 不能 post請(qǐng)求

示例: 請(qǐng)看 JSONP跨域詳解

三. ES6-fetch

Fetch API 提供了一個(gè) JavaScript接口,用于訪(fǎng)問(wèn)和操縱HTTP管道的部分车摄,例如請(qǐng)求和響應(yīng)。它還提供了一個(gè)全局 fetch()方法仑鸥,該方法提供了一種簡(jiǎn)單吮播,合理的方式來(lái)跨網(wǎng)絡(luò)異步獲取資源。
我們使用Fetch來(lái)獲取數(shù)據(jù)時(shí)眼俊,會(huì)返回給我們一個(gè)Pormise對(duì)象意狠,是因?yàn)镕etch API是基于Promise設(shè)計(jì)的。并且fetch調(diào)用非常簡(jiǎn)單疮胖,因?yàn)樗菕煸贐OM上的环戈,屬于全局的方法。

Fetch是ajax非常好的一個(gè)替代品澎灸,很有可能將來(lái)會(huì)完全代替ajax的地位院塞。我們先來(lái)看下瀏覽器的支持情況:

20181130112153453.png

我們可以看到IE瀏覽器完全不支持Fetch,并且移動(dòng)端的很多瀏覽器也不支持Fetch性昭,不過(guò)可以使用第三方的ployfill來(lái)獲得支持拦止。Github.fetch

優(yōu)缺點(diǎn) 描述
優(yōu)點(diǎn) 支持Pormise對(duì)象
優(yōu)點(diǎn) fetch調(diào)用非常簡(jiǎn)單
缺點(diǎn) 瀏覽器完全不支持Fetch

示例: 請(qǐng)看 fetch 文檔詳情

websocket使用方式 請(qǐng)看 菜鳥(niǎo)教程

MVC模式,請(qǐng)求數(shù)據(jù)不關(guān)前端的事糜颠。我已經(jīng)不想走回頭路了汹族。

切圖仔祝大家前途無(wú)限

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市其兴,隨后出現(xiàn)的幾起案子顶瞒,更是在濱河造成了極大的恐慌,老刑警劉巖元旬,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件榴徐,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡法绵,警方通過(guò)查閱死者的電腦和手機(jī)箕速,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)朋譬,“玉大人盐茎,你說(shuō)我怎么就攤上這事♂阌” “怎么了字柠?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵探越,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我窑业,道長(zhǎng)钦幔,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任常柄,我火速辦了婚禮鲤氢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘西潘。我一直安慰自己卷玉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布喷市。 她就那樣靜靜地躺著相种,像睡著了一般。 火紅的嫁衣襯著肌膚如雪品姓。 梳的紋絲不亂的頭發(fā)上寝并,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音腹备,去河邊找鬼衬潦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛馏谨,可吹牛的內(nèi)容都是我干的别渔。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼惧互,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼哎媚!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起喊儡,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤拨与,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后艾猜,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體买喧,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年匆赃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了淤毛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡算柳,死狀恐怖低淡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤蔗蹋,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布何荚,位于F島的核電站,受9級(jí)特大地震影響猪杭,放射性物質(zhì)發(fā)生泄漏餐塘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一皂吮、第九天 我趴在偏房一處隱蔽的房頂上張望戒傻。 院中可真熱鬧,春花似錦蜂筹、人聲如沸稠鼻。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至熙暴,卻和暖如春闺属,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背周霉。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工掂器, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人俱箱。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓国瓮,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親狞谱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子乃摹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)跟衅。 注意:講述HT...
    kismetajun閱讀 27,424評(píng)論 1 45
  • 1.幾種基本數(shù)據(jù)類(lèi)型?復(fù)雜數(shù)據(jù)類(lèi)型?值類(lèi)型和引用數(shù)據(jù)類(lèi)型?堆棧數(shù)據(jù)結(jié)構(gòu)? 基本數(shù)據(jù)類(lèi)型:Undefined孵睬、Nul...
    極樂(lè)君閱讀 5,498評(píng)論 0 106
  • AJAX 原生js操作ajax 1.創(chuàng)建XMLHttpRequest對(duì)象 var xhr = new XMLHtt...
    碧玉含香閱讀 3,173評(píng)論 0 7
  • ??2005 年掰读,Jesse James Garrett 發(fā)表了一篇在線(xiàn)文章,題為“Ajax: A new App...
    霜天曉閱讀 883評(píng)論 0 1
  • 在青苗訓(xùn)練營(yíng)日?qǐng)?bào)總結(jié)的時(shí)候叭莫,我有一段演講蹈集,講的不是很明白,所以雇初,我寫(xiě)一篇文章來(lái)講一下我的想法拢肆。 我講的主題是“抽象...
    凌霄光閱讀 711評(píng)論 0 0