Ajax
1.Ajax 是什么? 如何創(chuàng)建一個(gè) Ajax?
Ajax 并不算是一種新的技術(shù)憾朴,全稱是 asychronous javascript and xml,可以說是已有技術(shù)的組合焙贷,主要用來實(shí)現(xiàn)客戶端與服務(wù)器端的異步通信效果缩抡,實(shí)現(xiàn)頁面的局部刷新,早期的瀏覽器并不能原生支持 ajax哗讥,可以使用隱藏幀(iframe)方式變相實(shí)現(xiàn)異步效果迈窟,后來的瀏覽器提供了對(duì) ajax 的原生支持
使 用 ajax 原 生 方 式 發(fā) 送 請(qǐng) 求 主 要 通 過 XMLHttpRequest( 標(biāo) 準(zhǔn) 瀏 覽器).ActiveXObject(IE 瀏覽器)對(duì)象實(shí)現(xiàn)異步通信效果基本步驟:
var xhr =null;//創(chuàng)建對(duì)象 if(window.XMLHttpRequest){
xhr = new XMLHttpRequest();
}else{
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
xhr.open(“方式”,”地址”,”標(biāo)志位”);//初始化請(qǐng)求xhr.setRequestHeader(“”,””);//設(shè)置 http 頭信息 xhr.onreadystatechange =function(){}//指定回調(diào)函數(shù)xhr.send();//發(fā)送請(qǐng)求 js 框架(jQuery/EXTJS 等)提供的 ajax API 對(duì)原生的 ajax 進(jìn)行了封裝,熟悉了基礎(chǔ)
理論忌栅,再學(xué)習(xí)別的框架就會(huì)得心應(yīng)手车酣,好多都是換湯不換藥的內(nèi)容
2.****同步和異步的區(qū)別?
同步:阻塞的
-張三叫李四去吃飯,李四一直忙得不停索绪,張三一直等著湖员,直到李四忙完兩個(gè)人一塊去吃飯
=瀏覽器向服務(wù)器請(qǐng)求數(shù)據(jù),服務(wù)器比較忙瑞驱,瀏覽器一直等著(頁面白屏)娘摔,直到服務(wù)器返回?cái)?shù)據(jù),瀏覽器才能顯示頁面
-張三叫李四去吃飯唤反,李四在忙凳寺,張三說了一聲然后自己就去吃飯了鸭津,李四忙完后自己去吃
=瀏覽器向服務(wù)器請(qǐng)求數(shù)據(jù),服務(wù)器比較忙肠缨,瀏覽器可以自如的干原來的事情(顯示頁面)逆趋,服務(wù)器返回?cái)?shù)據(jù)的時(shí)候通知瀏覽器一聲,瀏覽器把返回的數(shù)據(jù)再渲染到頁面晒奕,局部更新
3.****如何解決跨域問題?
理解跨域的概念:協(xié)議.域名.端口都相同才同域闻书,否則都是跨域出于安全考慮,服務(wù)器不允許 ajax 跨域獲取數(shù)據(jù)脑慧,但是可以跨域獲取文件內(nèi)容魄眉,所以
基于這一點(diǎn),可以動(dòng)態(tài)創(chuàng)建 script 標(biāo)簽闷袒,使用標(biāo)簽的 src 屬性訪問 js 文件的形式獲取 js
腳本坑律,并且這個(gè) js 腳本中的內(nèi)容是函數(shù)調(diào)用,該函數(shù)調(diào)用的參數(shù)是服務(wù)器返回的數(shù)據(jù)囊骤,為了獲取這里的參數(shù)數(shù)據(jù)脾歇,需要事先在頁面中定義回調(diào)函數(shù),在回調(diào)函數(shù)中處理服務(wù)器返回的數(shù)據(jù)淘捡,這就是解決跨域問題的主流解決方案
4.****頁面編碼和被請(qǐng)求的資源編碼如果不一致如何處理藕各?
對(duì)于 ajax 請(qǐng)求傳遞的參數(shù),如果是 get 請(qǐng)求方式焦除,參數(shù)如果傳遞中文激况,在有些瀏覽器會(huì)亂碼,不同的瀏覽器對(duì)參數(shù)編碼的處理方式不同膘魄,所以對(duì)于 get 請(qǐng)求的參數(shù)需要使用
encodeURIComponent 函數(shù)對(duì)參數(shù)進(jìn)行編碼處理乌逐,后臺(tái)開發(fā)語言都有相應(yīng)的解碼 api。對(duì)于 post 請(qǐng)求不需要
進(jìn)行編碼
5.****簡(jiǎn)述 ajax 的過程创葡。
創(chuàng)建 XMLHttpRequest 對(duì)象,也就是創(chuàng)建一個(gè)異步調(diào)用對(duì)象
創(chuàng)建一個(gè)新的 HTTP 請(qǐng)求,并指定該 HTTP 請(qǐng)求的方法.URL 及驗(yàn)證信息
設(shè)置響應(yīng) HTTP 請(qǐng)求狀態(tài)變化的函數(shù)
發(fā)送 HTTP 請(qǐng)求
獲取異步調(diào)用返回的數(shù)據(jù)
使用 JavaScript 和 DOM 實(shí)現(xiàn)局部刷新
6.****闡述一下異步加載浙踢。
異步加載的方案: 動(dòng)態(tài)插入 script 標(biāo)簽
通過 ajax 去獲取 js 代碼,然后通過 eval 執(zhí)行
script 標(biāo)簽上添加 defer 或者 async 屬性
創(chuàng)建并插入 iframe灿渴,讓它異步執(zhí)行 js
7.****請(qǐng)解釋一下 JavaScript 的同源策略洛波。
同源策略是客戶端腳本(尤其是 Javascript)的重要的安全度量標(biāo)準(zhǔn)。它最早出自
Netscape Navigator2.0骚露,其目的是防止某個(gè)文檔或腳本從多個(gè)不同源裝載蹬挤。所謂同源指的
是:協(xié)議,域名棘幸,端口相同焰扳,同源策略是一種安全協(xié)議,指一段腳本只能讀取來自同一來源的窗口和文檔的屬性。
8.GET 和 POST 的區(qū)別吨悍,何時(shí)使用 POST扫茅?
GET:一般用于信息獲取,使用 URL 傳遞參數(shù)育瓜,對(duì)所發(fā)送信息的數(shù)量也有限制葫隙,一般在
2000 個(gè)字符,有的瀏覽器是 8000 個(gè)字符POST:一般用于修改服務(wù)器上的資源爆雹,對(duì)所發(fā)送的信息沒有限制
在以下情況中停蕉,請(qǐng)使用 POST 請(qǐng)求:
無法使用緩存文件(更新服務(wù)器上的文件或數(shù)據(jù)庫)
向服務(wù)器發(fā)送大量數(shù)據(jù)(POST 沒有數(shù)據(jù)量限制)
發(fā)送包含未知字符的用戶輸入時(shí)愕鼓,POST 比 GET 更穩(wěn)定也更可靠
9.ajax 是什么?ajax 的交互模型?同步和異步的區(qū)別?如何解決跨域問題?
通過異步模式钙态,提升了用戶體驗(yàn)
優(yōu)化了瀏覽器和服務(wù)器之間的傳輸,減少不必要的數(shù)據(jù)往返菇晃,減少了帶寬占用
Ajax 在客戶端運(yùn)行册倒,承擔(dān)了一部分本來由服務(wù)器承擔(dān)的工作,減少了大用戶量下的服務(wù)器負(fù)載磺送。
10. Ajax 的最大的特點(diǎn)是什么驻子。
Ajax 可以實(shí)現(xiàn)異步通信效果,實(shí)現(xiàn)頁面局部刷新估灿,帶來更好的用戶體驗(yàn)崇呵;按需獲取數(shù)據(jù),節(jié)約帶寬資源馅袁;
11.ajax 的缺點(diǎn)
1.ajax 不支持瀏覽器 back 按鈕域慷。
2.安全問題 AJAX 暴露了與服務(wù)器交互的細(xì)節(jié)。
3.對(duì)搜索引擎的支持比較弱汗销。
4.破壞了程序的異常機(jī)制犹褒。
12.ajax 請(qǐng)求的時(shí)候 get 和 post 方式的區(qū)別
get 一般用來進(jìn)行查詢操作,url 地址有長(zhǎng)度限制弛针,請(qǐng)求的參數(shù)都暴露在 url 地址當(dāng)中叠骑,如果傳遞中文參數(shù),需要自己進(jìn)行編碼操作削茁,安全性較低宙枷。
post 請(qǐng)求方式主要用來提交數(shù)據(jù),沒有數(shù)據(jù)長(zhǎng)度的限制茧跋,提交的數(shù)據(jù)內(nèi)容存在于 http
請(qǐng)求體中朦拖,數(shù)據(jù)不會(huì)暴漏在 url 地址中。