題目1:ajax 是什么或颊?有什么作用魔种?
AJAX 是異步的 JavaScript 和 XML(Asynchronous JavaScript And XML)悠栓。簡(jiǎn)單點(diǎn)說色解,就是使用 XMLHttpRequest對(duì)象與服務(wù)器通信。 它可以使用 JSON钥勋,XML炬转,HTML 和文本等多種格式發(fā)送和接收,可以在不重新刷新頁(yè)面的情況下與服務(wù)器通信辆苔,交換數(shù)據(jù),更新頁(yè)面扼劈;是一種技術(shù)方案,但并不是一種新的編程語(yǔ)言新技術(shù)驻啤。它依賴的是現(xiàn)有的 CSS/HTML/Javascript,而其中最核心的依賴是瀏覽器提供的 XMLHttpRequest 對(duì)象荐吵,是這個(gè)對(duì)象使得瀏覽器可以發(fā)出 HTTP 請(qǐng)求與接受 HTTP 響應(yīng)骑冗。實(shí)現(xiàn)在頁(yè)面不刷新的情況下和服務(wù)器進(jìn)行數(shù)據(jù)交互。一句話實(shí)現(xiàn)兩者的關(guān)系:我們使用 XMLHttpRequest 對(duì)象來發(fā)送一個(gè)Ajax請(qǐng)求先煎。
-
主要作用:
- 在不重新加載頁(yè)面的情況下發(fā)送請(qǐng)求給服務(wù)器贼涩。
- 接受并使用從服務(wù)器發(fā)來的數(shù)據(jù)。
-
優(yōu)點(diǎn):
-
無刷新更新數(shù)據(jù)薯蝎。
AJAX最大優(yōu)點(diǎn)就是能在不刷新整個(gè)頁(yè)面的前提下與服務(wù)器通信維護(hù)數(shù)據(jù)遥倦。這使得Web應(yīng)用程序更為迅捷地響應(yīng)用戶交互,并避免了在網(wǎng)絡(luò)上發(fā)送那些沒有改變的信息占锯,減少用戶等待時(shí)間袒哥,帶來非常好的用戶體驗(yàn)。
-
異步與服務(wù)器通信消略。
AJAX使用異步方式與服務(wù)器通信堡称,不需要打斷用戶的操作,具有更加迅速的響應(yīng)能力艺演。優(yōu)化了Browser和Server之間的溝通却紧,減少不必要的數(shù)據(jù)傳輸、時(shí)間及降低網(wǎng)絡(luò)上數(shù)據(jù)流量胎撤。
-
前端和后端負(fù)載平衡啄寡。
AJAX可以把以前一些服務(wù)器負(fù)擔(dān)的工作轉(zhuǎn)嫁到客戶端,利用客戶端閑置的能力來處理哩照,減輕服務(wù)器和帶寬的負(fù)擔(dān),節(jié)約空間和寬帶租用成本懒浮。并且減輕服務(wù)器的負(fù)擔(dān)飘弧,AJAX的原則是“按需取數(shù)據(jù)”,可以最大程度的減少冗余請(qǐng)求和響應(yīng)對(duì)服務(wù)器造成的負(fù)擔(dān)砚著,提升站點(diǎn)性能次伶。
-
基于標(biāo)準(zhǔn)被廣泛支持。
AJAX基于標(biāo)準(zhǔn)化的并被廣泛支持的技術(shù)稽穆,不需要下載瀏覽器插件或者小程序冠王,但需要客戶允許JavaScript在瀏覽器上執(zhí)行。隨著Ajax的成熟舌镶,一些簡(jiǎn)化Ajax使用方法的程序庫(kù)也相繼問世柱彻。同樣豪娜,也出現(xiàn)了另一種輔助程序設(shè)計(jì)的技術(shù),為那些不支持JavaScript的用戶提供替代功能哟楷。
-
界面與應(yīng)用分離瘤载。
Ajax使WEB中的界面與應(yīng)用分離(也可以說是數(shù)據(jù)與呈現(xiàn)分離),有利于分工合作卖擅、減少非技術(shù)人員對(duì)頁(yè)面的修改造成的WEB應(yīng)用程序錯(cuò)誤鸣奔、提高效率、也更加適用于現(xiàn)在的發(fā)布系統(tǒng)惩阶。
-
-
缺點(diǎn)
-
AjAX干掉了Back和加入收藏書簽功能挎狸,即對(duì)瀏覽器機(jī)制的破壞。
對(duì)應(yīng)用Ajax最主要的批評(píng)就是断楷,它可能破壞瀏覽器的后退與加入收藏書簽功能锨匆。在動(dòng)態(tài)更新頁(yè)面的情況下,用戶無法回到前一個(gè)頁(yè)面狀態(tài)脐嫂,這是因?yàn)闉g覽器僅能記下歷史記錄中的靜態(tài)頁(yè)面统刮。一個(gè)被完整讀入的頁(yè)面與一個(gè)已經(jīng)被動(dòng)態(tài)修改過的頁(yè)面之間的可能差別非常微妙;用戶通常都希望單擊后退按鈕账千,就能夠取消他們的前一次操作侥蒙,但是在Ajax應(yīng)用程序中,卻無法這樣做匀奏。不過開發(fā)者已想出了種種辦法來解決這個(gè)問題鞭衩,HTML5 之前的方法大多是在用戶單擊后退按鈕訪問歷史記錄時(shí),通過創(chuàng)建或使用一個(gè)隱藏的IFRAME來重現(xiàn)頁(yè)面上的變更娃善。(例如论衍,當(dāng)用戶在Google Maps中單擊后退時(shí),它在一個(gè)隱藏的IFRAME中進(jìn)行搜索聚磺,然后將搜索結(jié)果反映到Ajax元素上坯台,以便將應(yīng)用程序狀態(tài)恢復(fù)到當(dāng)時(shí)的狀態(tài))。
關(guān)于無法將狀態(tài)加入收藏或書簽的問題瘫寝,HTML5之前的一種方式是使用URL片斷標(biāo)識(shí)符(通常被稱為錨點(diǎn)蜒蕾,即URL中#后面的部分)來保持追蹤,允許用戶回到指定的某個(gè)應(yīng)用程序狀態(tài)焕阿。(許多瀏覽器允許JavaScript動(dòng)態(tài)更新錨點(diǎn)咪啡,這使得Ajax應(yīng)用程序能夠在更新顯示內(nèi)容的同時(shí)更新錨點(diǎn)。)HTML5 以后可以直接操作瀏覽歷史暮屡,并以字符串形式存儲(chǔ)網(wǎng)頁(yè)狀態(tài)撤摸,將網(wǎng)頁(yè)加入網(wǎng)頁(yè)收藏夾或書簽時(shí)狀態(tài)會(huì)被隱形地保留。上述兩個(gè)方法也可以同時(shí)解決無法后退的問題。 AJAX的安全問題准夷。
AJAX技術(shù)給用戶帶來很好的用戶體驗(yàn)的同時(shí)也對(duì)IT企業(yè)帶來了新的安全威脅钥飞,Ajax技術(shù)就如同對(duì)企業(yè)數(shù)據(jù)建立了一個(gè)直接通道。這使得開發(fā)者在不經(jīng)意間會(huì)暴露比以前更多的數(shù)據(jù)和服務(wù)器邏輯冕象。Ajax的邏輯可以對(duì)客戶端的安全掃描技術(shù)隱藏起來代承,允許黑客從遠(yuǎn)端服務(wù)器上建立新的攻擊。還有Ajax也難以避免一些已知的安全弱點(diǎn)渐扮,諸如跨站點(diǎn)腳步攻擊论悴、SQL注入攻擊和基于Credentials的安全漏洞等等。因?yàn)榫W(wǎng)絡(luò)延遲需要給用戶提供必要提示
進(jìn)行Ajax開發(fā)時(shí)墓律,網(wǎng)絡(luò)延遲——即用戶發(fā)出請(qǐng)求到服務(wù)器發(fā)出響應(yīng)之間的間隔——需要慎重考慮膀估。如果不給予用戶明確的回應(yīng),沒有恰當(dāng)?shù)念A(yù)讀數(shù)據(jù)耻讽,或者對(duì)XMLHttpRequest的不恰當(dāng)處理察纯,都會(huì)使用戶感到厭煩。通常的解決方案是针肥,使用一個(gè)可視化的組件來告訴用戶系統(tǒng)正在進(jìn)行后臺(tái)操作并且正在讀取數(shù)據(jù)和內(nèi)容饼记。
-
題目2: 前后端開發(fā)聯(lián)調(diào)需要注意哪些事情慰枕?后端接口完成前如何 mock 數(shù)據(jù)具则?
在開發(fā)之前,前后端需要協(xié)作商定數(shù)據(jù)和接口的各項(xiàng)細(xì)節(jié)具帮,后端負(fù)責(zé)提供數(shù)據(jù)博肋,前端負(fù)責(zé)展示數(shù)據(jù)(根據(jù)數(shù)據(jù)負(fù)責(zé)頁(yè)面的開發(fā))
-
前后端開發(fā)聯(lián)調(diào)注意事項(xiàng):
- URL:接口名稱
- 發(fā)送請(qǐng)求的參數(shù)和格式(get/post)
- 數(shù)據(jù)響應(yīng)的數(shù)據(jù)格式(數(shù)組/對(duì)象)
- 根據(jù)前后端約定,整理接口文檔
-
如何 mock 數(shù)據(jù)
- 搭建 Web 服務(wù)器
- 根據(jù)接口文檔仿造數(shù)據(jù)
- 關(guān)聯(lián)前后端文件蜂厅,開啟 Web 服務(wù)器
- 驗(yàn)證前端頁(yè)面功能及顯示是否正確
題目3:點(diǎn)擊按鈕匪凡,使用 ajax 獲取數(shù)據(jù),如何在數(shù)據(jù)到來之前防止重復(fù)點(diǎn)擊?
- 通過設(shè)置狀態(tài)鎖來判斷是否正在請(qǐng)求中掘猿,如果是則不響應(yīng)病游,如果不是則請(qǐng)求數(shù)據(jù),詳細(xì)請(qǐng)看代碼:請(qǐng)點(diǎn)擊