摘要:在接收響應(yīng)期間持續(xù)不斷地觸發(fā)。在請求發(fā)生錯(cuò)誤時(shí)觸發(fā)。在通信完成或者觸發(fā)或事件后觸發(fā)。已經(jīng)接收到部分響應(yīng)數(shù)據(jù)?;跇?biāo)準(zhǔn)被廣泛支持。破壞程序的異常處理機(jī)制。
原文(我的GitHub):https://github.com/liangfengbo/frontend-ability/issues/1
學(xué)習(xí)大綱理解Ajax的工作原理
Ajax核心-XMLHttpRequest對象
封裝Ajax方法
Ajax優(yōu)缺點(diǎn)
Ajax適應(yīng)場景
Ajax系列面試題總結(jié)
Ajax的工作原理 含義:1. w3chool官網(wǎng):Ajax 是一種在無需重新加載整個(gè)網(wǎng)頁的情況下,能夠更新部分網(wǎng)頁的技術(shù)。 2. 我的理解:無須刷新頁面即可從服務(wù)器取得數(shù)據(jù)的技術(shù)。原理:
Ajax的工作原理相當(dāng)于在用戶和服務(wù)器之間加了—個(gè)中間層,使用戶操作與服務(wù)器響應(yīng)異步化。并不是所有的用戶請求都提交給服務(wù)器,像—些數(shù)據(jù)驗(yàn)證和數(shù)據(jù)處理等都交給Ajax引擎自己來做, 只有確定需要從服務(wù)器讀取新數(shù)據(jù)時(shí)再由Ajax引擎代為向服務(wù)器提交請求。
核心XMLHttpRequest對象Ajax技術(shù)的核心是XMLHttpRequest對象。
IE5 XHR對象是通過MSXML庫中的一個(gè)ActiveX對象實(shí)現(xiàn)的,所以要考慮做兼容。
IE7+、Firefox、Opera、Chrome和Safari都支持原生的XHR對象
new ActiveXObject(versions); new XMLHttpRequest();XMLHttpRequest 對象方法描述
方法 | 描述 |
---|---|
abort() | 停止當(dāng)前請求 |
getAllResponseHeaders() | 把HTTP請求的所有響應(yīng)首部作為鍵/值對返回 |
getResponseHeader("header") | 返回指定首部的串值 |
open("method","URL",[asyncFlag],["userName"],["password"]) | 建立對服務(wù)器的調(diào)用。method參數(shù)可以是GET、POST或PUT。url參數(shù)可以是相對URL或絕對URL。這個(gè)方法還包括3個(gè)可選的參數(shù),是否異步,用戶名,密碼 |
send(content) | 向服務(wù)器發(fā)送請求 |
setRequestHeader("header", "value") | 把指定首部設(shè)置為所提供的值。在設(shè)置任何首部之前必須先調(diào)用open()。設(shè)置header并和請求一起發(fā)送 ("post"方法一定要 ) |
屬性 | 描述 |
---|---|
onreadystatechange | 狀態(tài)改變的事件觸發(fā)器,每個(gè)狀態(tài)改變時(shí)都會(huì)觸發(fā)這個(gè)事件處理器,通常會(huì)調(diào)用一個(gè)JavaScript函數(shù) |
readyState | 請求的狀態(tài)。有5個(gè)可取值:0 = 未初始化,1 = 正在加載,2 = 已加載,3 = 交互中,4 = 完成 |
responseText | 服務(wù)器的響應(yīng),返回?cái)?shù)據(jù)的文本。 |
responseXML | 服務(wù)器的響應(yīng),返回?cái)?shù)據(jù)的兼容DOM的XML文檔對象 ,這個(gè)對象可以解析為一個(gè)DOM對象。 |
responseBody | 服務(wù)器返回的主題(非文本格式) |
responseStream | 服務(wù)器返回的數(shù)據(jù)流 |
status | 服務(wù)器的HTTP狀態(tài)碼(如:404 = "文件末找到" 、200 ="成功" ,等等) |
statusText | 服務(wù)器返回的狀態(tài)文本信息 ,HTTP狀態(tài)碼的相應(yīng)文本(OK或Not Found(未找到)等等) |
事件 | 描述 |
---|---|
loadstart | 在接收到響應(yīng)數(shù)據(jù)的第一個(gè)字節(jié)時(shí)觸發(fā)。 |
progress | 在接收響應(yīng)期間持續(xù)不斷地觸發(fā)。 |
error | 在請求發(fā)生錯(cuò)誤時(shí)觸發(fā)。 |
abort | 在因?yàn)檎{(diào)用abort()方法而終止連接時(shí)觸發(fā)。 |
load | 在接收到完整的響應(yīng)數(shù)據(jù)時(shí)觸發(fā)。 |
loadend | 在通信完成或者觸發(fā)error、abort或load事件后觸發(fā)。 |
/** * 創(chuàng)建Ajax * @param options */ function Ajax(options) { // 新建一個(gè)對象,用途接受XHR對象 var xhr = null; // 第一步創(chuàng)建XMLHttpRequest對象 || 同時(shí)兼任IE // 首先檢測原生XHR對象是否存在,如果存在則返回它的新實(shí)例 if (typeof XMLHttpRequest != "undefined") { xhr = new XMLHttpRequest(); // 然后如果原生對象不存在,則檢測ActiveX對象 } else if (typeof ActiveXObject != "undefined") { // 如果存在,則創(chuàng)建他的對象,但這個(gè)對象需要一個(gè)傳入?yún)?shù),如下: if (typeof arguments.callee.activeXString != "string") { // 對象版本 var versions = [ "Microsoft.XMLHTTP", "Msxml2.XMLHTTP.7.0", "Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML.XMLHTTP" ], i, len; for (i = 0, len = versions.length; i < len; i++) { try { // 需要versions數(shù)組中的某個(gè)項(xiàng),數(shù)組的7個(gè)項(xiàng)分別對應(yīng)7個(gè)版本. new ActiveXObject(versions[i]); // arguments是javascript函數(shù)的內(nèi)置對象,代表傳入?yún)?shù)的集合, // callee就代表對象本身即new createXHR arguments.callee.activeXString = versions[i]; break; } catch (e) { // 跳過 } } } // 直到循環(huán)創(chuàng)建成功為止,然后給自己添加一個(gè)屬性叫activeXString xhr = new ActiveXObject(arguments.callee.activeXString); } else { // 如果這兩種對象都不存在,就拋出一個(gè)錯(cuò)誤 throw new Error("No XHR object available"); } /** ** options形參解析: * data 發(fā)送的參數(shù),格式為對象類型 * url 發(fā)送請求的url,服務(wù)器地址(api) * async 否為異步請求,true為異步的,false為同步的 * method http連接的方式,包括POST和GET兩種方式 */ options = options || {}; options.success = options.success || function () { }; options.fail = options.fail || function () { }; var data = options.data, url = options.url, async = options.async === undefined ? true : options.async, method = options.method.toUpperCase(), dataArr = []; // 遍歷參數(shù) for (var k in data) { dataArr.push(k + "=" + data[k]); } // GET請求 if (method === "GET") { url = url + "?" + dataArr.join("&"); xhr.open(method, url.replace(/?$/g, ""), async); xhr.send(); } // POST請求 if (method === "POST") { xhr.open(method, url, async); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.send(dataArr.join("&")); } // 響應(yīng)接收完畢后將觸發(fā)load事件 xhr.onload = function () { /** * XHR對象的readyState屬性 * 0:未初始化。尚未調(diào)用open()方法。 * 1:啟動(dòng)。已經(jīng)調(diào)用open()方法,但尚未調(diào)用send()方法。 * 2:發(fā)送。已經(jīng)調(diào)用send()方法,但尚未接收到響應(yīng)。 * 3:接收。已經(jīng)接收到部分響應(yīng)數(shù)據(jù)。 * 4:完成。已經(jīng)接收到全部響應(yīng)數(shù)據(jù),而且已經(jīng)可以在客戶端使用了。 */ if (xhr.readyState == 4) { // 得到響應(yīng) if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) { // 處理成功數(shù)據(jù) var res; if (options.success && options.success instanceof Function) { res = xhr.responseText; if (typeof res === "string") { res = JSON.parse(res); options.success.call(xhr, res); } } } else { // 處理錯(cuò)誤數(shù)據(jù) if (options.fail && options.fail instanceof Function) { options.fail.call(xhr, res) } } } else { // 拋出檢測XHR對象的readyState屬性 console.log("XHR was readyState:", xhr.readyState); } } }options參數(shù)說明
參數(shù) | 類型 | 描述 | 默認(rèn)值 | 是否填 |
---|---|---|---|---|
url | string | 發(fā)送請求的url,服務(wù)器地址(api) | "" | 必填 |
method | string | http連接的方式,包括POST和GET兩種方式 | true | 選填 |
async | boolean | 是否為異步請求,true為異步的,false為同步的 | true | 選填 |
data | json | 發(fā)送的參數(shù),格式為對象(json)類型 | null | 選填 |
success | function | 請求成功回調(diào)函數(shù) | function () { } | 必填 |
fail | function | 請求失敗回調(diào)函數(shù) | function () { } | 必填 |
Ajax({ url: "http://localhost:3000/api/v1/article", method: "GET", async: true, success: function (res) { console.log("successful", res); }, fail: function (err) { console.log("fail", err); } })成功返回?cái)?shù)據(jù):
successful {code: 200, msg: "查詢文章列表成功!", data: {…}}Ajax優(yōu)點(diǎn) 1.無刷新更新數(shù)據(jù)。
AJAX最大優(yōu)點(diǎn)就是能在不刷新整個(gè)頁面的前提下與服務(wù)器通信維護(hù)數(shù)據(jù)。這使得Web應(yīng)用程序更為迅捷地響應(yīng)用戶交互,并避免了在網(wǎng)絡(luò)上發(fā)送那些沒有改變的信息,減少用戶等待時(shí)間,帶來非常好的用戶體驗(yàn)。
2.異步與服務(wù)器通信。AJAX使用異步方式與服務(wù)器通信,不需要打斷用戶的操作,具有更加迅速的響應(yīng)能力。優(yōu)化了Browser和Server之間的溝通,減少不必要的數(shù)據(jù)傳輸、時(shí)間及降低網(wǎng)絡(luò)上數(shù)據(jù)流量。
3.前端和后端負(fù)載平衡。AJAX可以把以前一些服務(wù)器負(fù)擔(dān)的工作轉(zhuǎn)嫁到客戶端,利用客戶端閑置的能力來處理,減輕服務(wù)器和帶寬的負(fù)擔(dān),節(jié)約空間和寬帶租用成本。并且減輕服務(wù)器的負(fù)擔(dān),AJAX的原則是“按需取數(shù)據(jù)”,可以最大程度的減少冗余請求和響應(yīng)對服務(wù)器造成的負(fù)擔(dān),提升站點(diǎn)性能。
4.基于標(biāo)準(zhǔn)被廣泛支持。AJAX基于標(biāo)準(zhǔn)化的并被廣泛支持的技術(shù),不需要下載瀏覽器插件或者小程序,但需要客戶允許JavaScript在瀏覽器上執(zhí)行。隨著Ajax的成熟,一些簡化Ajax使用方法的程序庫也相繼問世。同樣,也出現(xiàn)了另一種輔助程序設(shè)計(jì)的技術(shù),為那些不支持JavaScript的用戶提供替代功能。
5.界面與應(yīng)用分離。Ajax使WEB中的界面與應(yīng)用分離(也可以說是數(shù)據(jù)與呈現(xiàn)分離),有利于分工合作、減少非技術(shù)人員對頁面的修改造成的WEB應(yīng)用程序錯(cuò)誤、提高效率、也更加適用于現(xiàn)在的發(fā)布系統(tǒng)。
Ajax缺點(diǎn) 1.AJAX干掉了Back和History功能,即對瀏覽器機(jī)制的破壞。在動(dòng)態(tài)更新頁面的情況下,用戶無法回到前一個(gè)頁面狀態(tài),因?yàn)闉g覽器僅能記憶歷史記錄中的靜態(tài)頁面。一個(gè)被完整讀入的頁面與一個(gè)已經(jīng)被動(dòng)態(tài)修改過的頁面之間的差別非常微妙;用戶通常會(huì)希望單擊后退按鈕能夠取消他們的前一次操作,但是在Ajax應(yīng)用程序中,這將無法實(shí)現(xiàn)
2.AJAX的安全問題JAX技術(shù)給用戶帶來很好的用戶體驗(yàn)的同時(shí)也對IT企業(yè)帶來了新的安全威脅,Ajax技術(shù)就如同對企業(yè)數(shù)據(jù)建立了一個(gè)直接通道。這使得開發(fā)者在不經(jīng)意間會(huì)暴露比以前更多的數(shù)據(jù)和服務(wù)器邏輯。Ajax的邏輯可以對客戶端的安全掃描技術(shù)隱藏起來,允許黑客從遠(yuǎn)端服務(wù)器上建立新的攻擊。還有Ajax也難以避免一些已知的安全弱點(diǎn),諸如跨站點(diǎn)腳步攻擊、SQL注入攻擊和基于Credentials的安全漏洞等等
3.對搜索引擎支持較弱。對搜索引擎的支持比較弱。如果使用不當(dāng),AJAX會(huì)增大網(wǎng)絡(luò)數(shù)據(jù)的流量,從而降低整個(gè)系統(tǒng)的性能。
4.破壞程序的異常處理機(jī)制。至少從目前看來,像Ajax.dll,Ajaxpro.dll這些Ajax框架是會(huì)破壞程序的異常機(jī)制的。關(guān)于這個(gè)問題,曾在開發(fā)過程中遇到過,但是查了一下網(wǎng)上幾乎沒有相關(guān)的介紹。后來做了一次試驗(yàn),分別采用Ajax和傳統(tǒng)的form提交的模式來刪除一條數(shù)據(jù)……給我們的調(diào)試帶來了很大的困難
5.AJAX不能很好支持移動(dòng)設(shè)備。一些手持設(shè)備(如手機(jī)、PDA等)現(xiàn)在還不能很好的支持Ajax,比如說我們在手機(jī)的瀏覽器上打開采用Ajax技術(shù)的網(wǎng)站時(shí),它目前是不支持的。
Ajax適用場景表單驅(qū)動(dòng)的交互
深層次的樹的導(dǎo)航
快速的用戶與用戶間的交流響應(yīng)
類似投票、yes/no等無關(guān)痛癢的場景
對數(shù)據(jù)進(jìn)行過濾和操縱相關(guān)數(shù)據(jù)的場景
普通的文本輸入提示和自動(dòng)完成的場景
Ajax不適用場景部分簡單的表單
搜索
基本的導(dǎo)航
替換大量的文本
對呈現(xiàn)的操縱
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)異步效果,后來的瀏覽器提供了對ajax的原生支持
使用ajax原生方式發(fā)送請求主要通過XMLHttpRequest(標(biāo)準(zhǔn)瀏覽器)、ActiveXObject(IE瀏覽器)對象實(shí)現(xiàn)異步通信效果
基本步驟:
var xhr =null;//創(chuàng)建對象 if(window.XMLHttpRequest){ xhr = new XMLHttpRequest(); }else{ xhr = new ActiveXObject("Microsoft.XMLHTTP"); } xhr.open(“方式”,”地址”,”標(biāo)志位”);//初始化請求 xhr.setRequestHeader(“”,””);//設(shè)置http頭信息 xhr.onreadystatechange =function(){}//指定回調(diào)函數(shù) xhr.send();//發(fā)送請求
js框架(jQuery/EXTJS等)提供的ajax API對原生的ajax進(jìn)行了封裝,熟悉了基礎(chǔ)理論,再學(xué)習(xí)別的框架就會(huì)得心應(yīng)手,好多都是換湯不換藥的內(nèi)容
2、同步和異步的區(qū)別?同步:阻塞的
張三叫李四去吃飯,李四一直忙得不停,張三一直等著,直到李四忙完兩個(gè)人一塊去吃飯,瀏覽器向服務(wù)器請求數(shù)據(jù),服務(wù)器比較忙,瀏覽器一直等著(頁面白屏),直到服務(wù)器返回?cái)?shù)據(jù),瀏覽器才能顯示頁面
異步:非阻塞的
張三叫李四去吃飯,李四在忙,張三說了一聲然后自己就去吃飯了,李四忙完后自己去吃,瀏覽器向服務(wù)器請求數(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、頁面編碼和被請求的資源編碼如果不一致如何處理?對于ajax請求傳遞的參數(shù),如果是get請求方式,參數(shù)如果傳遞中文,在有些瀏覽器會(huì)亂碼,不同的瀏覽器對參數(shù)編碼的處理方式不同,所以對于get請求的參數(shù)需要使用encodeURIComponent函數(shù)對參數(shù)進(jìn)行編碼處理,后臺(tái)開發(fā)語言都有相應(yīng)的解碼api。對于post請求不需要進(jìn)行編碼
5、簡述ajax的過程。創(chuàng)建XMLHttpRequest對象,也就是創(chuàng)建一個(gè)異步調(diào)用對象
創(chuàng)建一個(gè)新的HTTP請求,并指定該HTTP請求的方法、URL及驗(yàn)證信息
設(shè)置響應(yīng)HTTP請求狀態(tài)變化的函數(shù)
發(fā)送HTTP請求
獲取異步調(diào)用返回的數(shù)據(jù)
使用JavaScript和DOM實(shí)現(xiàn)局部刷新
6、闡述一下異步加載JS。異步加載的方案: 動(dòng)態(tài)插入 script 標(biāo)簽
通過 ajax 去獲取 js 代碼,然后通過 eval 執(zhí)行
script 標(biāo)簽上添加 defer 或者 async 屬性
創(chuàng)建并插入 iframe,讓它異步執(zhí)行 js
7、請解釋一下 JavaScript的同源策略?!?/b>同源策略是客戶端腳本(尤其是Javascript)的重要的安全度量標(biāo)準(zhǔn)。它最早出自Netscape Navigator2.0,其目的是防止某個(gè)文檔或腳本從多個(gè)不同源裝載。所謂同源指的是:協(xié)議,域名,端口相同,同源策略是一種安全協(xié)議,指一段腳本只能讀取來自同一來源的窗口和文檔的屬性。
8、GET和POST的區(qū)別,何時(shí)使用POST?GET:一般用于信息獲取,使用URL傳遞參數(shù),對所發(fā)送信息的數(shù)量也有限制,一般在2000個(gè)字符,有的瀏覽器是8000個(gè)字符
POST:一般用于修改服務(wù)器上的資源,對所發(fā)送的信息沒有限制
在以下情況中,請使用 POST 請求:
無法使用緩存文件(更新服務(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、對搜索引擎的支持比較弱。
4、破壞了程序的異常機(jī)制。
12、ajax請求的時(shí)候get和post方式的區(qū)別get一般用來進(jìn)行查詢操作,url地址有長度限制,請求的參數(shù)都暴露在url地址當(dāng)中,如果傳遞中文參數(shù),需要自己進(jìn)行編碼操作,安全性較低。
post請求方式主要用來提交數(shù)據(jù),沒有數(shù)據(jù)長度的限制,提交的數(shù)據(jù)內(nèi)容存在于http請求體中,數(shù)據(jù)不會(huì)暴漏在url地址中。
13、解釋jsonp的原理,以及為什么不是真正的ajaxJsonp并不是一種數(shù)據(jù)格式9,而json是一種數(shù)據(jù)格式,jsonp是用來解決跨域獲取數(shù)據(jù)的一種解決方案,具體是通過動(dòng)態(tài)創(chuàng)建script標(biāo)簽,然后通過標(biāo)簽的src屬性獲取js文件中的js腳本,該腳本的內(nèi)容是一個(gè)函數(shù)調(diào)用,參數(shù)就是服務(wù)器返回的數(shù)據(jù),為了處理這些返回的數(shù)據(jù),需要事先在頁面定義好回調(diào)函數(shù),本質(zhì)上使用的并不是ajax技術(shù)
14、什么是Ajax和JSON,它們的優(yōu)缺點(diǎn)。Ajax是全稱是asynchronous JavaScript andXML,即異步JavaScript和xml,用于在Web頁面中實(shí)現(xiàn)異步數(shù)據(jù)交互,實(shí)現(xiàn)頁面局部刷新。
優(yōu)點(diǎn):可以使得頁面不重載全部內(nèi)容的情況下加載局部內(nèi)容,降低數(shù)據(jù)傳輸量,避免用戶不斷刷新或者跳轉(zhuǎn)頁面,提高用戶體驗(yàn)
缺點(diǎn):對搜索引擎不友好;要實(shí)現(xiàn)ajax下的前后退功能成本較大;可能造成請求數(shù)的增加跨域問題限制;
JSON是一種輕量級的數(shù)據(jù)交換格式,ECMA的一個(gè)子集
優(yōu)點(diǎn):輕量級、易于人的閱讀和編寫,便于機(jī)器(JavaScript)解析,支持復(fù)合數(shù)據(jù)類型(數(shù)組、對象、字符串、數(shù)字)
15、http常見的狀態(tài)碼有那些?分別代表是什么意思?200 - 請求成功
301 - 資源(網(wǎng)頁等)被永久轉(zhuǎn)移到其它URL
404 - 請求的資源(網(wǎng)頁等)不存在
500 - 內(nèi)部服務(wù)器錯(cuò)誤
16、一個(gè)頁面從輸入 URL到頁面加載顯示完成,這個(gè)過程中都發(fā)生了什么?分為4個(gè)步驟:
當(dāng)發(fā)送一個(gè) URL 請求時(shí),不管這個(gè) URL 是 Web 頁面的 URL 還是 Web 頁面上每個(gè)資源的 URL,瀏覽器都會(huì)開啟一個(gè)線程來處理這個(gè)請求,同時(shí)在遠(yuǎn)程 DNS 服務(wù)器上啟動(dòng)一個(gè) DNS 查詢。這能使瀏覽器獲得請求對應(yīng)的 IP 地址。
瀏覽器與遠(yuǎn)程 Web 服務(wù)器通過 TCP 三次握手協(xié)商來建立一個(gè) TCP/IP 連接。該握手包括一個(gè)同步報(bào)文,一個(gè)同步-應(yīng)答報(bào)文和一個(gè)應(yīng)答報(bào)文,這三個(gè)報(bào)文在 瀏覽器和服務(wù)器之間傳遞。該握手首先由客戶端嘗試建立起通信,而后服務(wù)器應(yīng)答并接受客戶端的請求,最后由客戶端發(fā)出該請求已經(jīng)被接受的報(bào)文。
一旦 TCP/IP 連接建立,瀏覽器會(huì)通過該連接向遠(yuǎn)程服務(wù)器發(fā)送 HTTP 的 GET 請求。遠(yuǎn)程服務(wù)器找到資源并使用 HTTP 響應(yīng)返回該資源,值為 200 的 HTTP 響應(yīng)狀態(tài)表示一個(gè)正確的響應(yīng)。
此時(shí),Web 服務(wù)器提供資源服務(wù),客戶端開始下載資源。
17、ajax請求的時(shí)候get和post方式的區(qū)別get一般用來進(jìn)行查詢操作,url地址有長度限制,請求的參數(shù)都暴露在url地址當(dāng)中,如果傳遞中文參數(shù),需要自己進(jìn)行編碼操作,安全性較低。
post請求方式主要用來提交數(shù)據(jù),沒有數(shù)據(jù)長度的限制,提交的數(shù)據(jù)內(nèi)容存在于http請求體中,數(shù)據(jù)不會(huì)暴漏在url地址中。
18、ajax請求時(shí),如何解釋json數(shù)據(jù)
使用eval() 或者JSON.parse() 鑒于安全性考慮,推薦使用JSON.parse()更靠譜,對數(shù)據(jù)的安全性更好。
JavaScript高級程序設(shè)計(jì)第三版
AJAX工作原理及其優(yōu)缺點(diǎn)
Ajax原理以及優(yōu)缺點(diǎn)
Ajax的工作原理
Ajax系列面試題總結(jié)01
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/96057.html
摘要:而由于安全風(fēng)險(xiǎn)的原因,被禁止使用。就好比單線程一樣,請求發(fā)出后就進(jìn)入阻塞狀態(tài),直到解除阻塞,余下的代碼才會(huì)繼續(xù)執(zhí)行。安全問題暴露了與服務(wù)器交互的細(xì)節(jié)。破壞了程序的異常機(jī)制。服務(wù)器端暫時(shí)無法處理請求可能是過載或維護(hù)。 AJAX全稱Asynchronous JavaScript and XML(異步JavaScript和XML),是指一種創(chuàng)建交互式網(wǎng)頁應(yīng)用的網(wǎng)頁開發(fā)技術(shù)。它有機(jī)地包含了以下...
摘要:說明關(guān)于跨域問題的解決方案多達(dá)七八種,你不要說哪有這么多,我不跟你較真哈,你也別跟我較真哈自行百度或這里不會(huì)跟你說那么多種只說使用最多的一種你要非說用的不是最多的我不信哦你信好了哈哈你開心就好關(guān)于跨域?yàn)g覽器的同源策略要了解什么是跨域你需要了 說明 關(guān)于跨域問題的解決方案多達(dá)七、八種,你不要說哪有這么多,我不跟你較真哈,你也別跟我較真哈, ?!自行 百度 或 Google, 這里不會(huì)跟你...
摘要:及相關(guān)問題數(shù)據(jù)類型函數(shù)中指向原型作用域閉包面向?qū)ο髮ο髣?chuàng)建模式繼承嚴(yán)格模式與對象轉(zhuǎn)換的方法添加屬性,根據(jù)原型創(chuàng)建區(qū)別新特性解構(gòu)賦值簡化對象寫法剪頭函數(shù)三點(diǎn)運(yùn)算符模板字符串形參默認(rèn)值異步過程深拷貝與淺拷貝賦值與淺拷貝的區(qū)別淺拷貝的幾種方法實(shí)現(xiàn) js及es相關(guān)問題 數(shù)據(jù)類型函數(shù)中this指向——————原型作用域閉包——————面向?qū)ο髮ο髣?chuàng)建模式繼承——————Es5嚴(yán)格模式Json與j...
摘要:及相關(guān)問題數(shù)據(jù)類型函數(shù)中指向原型作用域閉包面向?qū)ο髮ο髣?chuàng)建模式繼承嚴(yán)格模式與對象轉(zhuǎn)換的方法添加屬性,根據(jù)原型創(chuàng)建區(qū)別新特性解構(gòu)賦值簡化對象寫法剪頭函數(shù)三點(diǎn)運(yùn)算符模板字符串形參默認(rèn)值異步過程深拷貝與淺拷貝賦值與淺拷貝的區(qū)別淺拷貝的幾種方法實(shí)現(xiàn) js及es相關(guān)問題 數(shù)據(jù)類型函數(shù)中this指向——————原型作用域閉包——————面向?qū)ο髮ο髣?chuàng)建模式繼承——————Es5嚴(yán)格模式Json與j...
摘要:它是一個(gè)過濾器的作用,只有被選中元素的后代元素才會(huì)觸發(fā)事件。替換是引入的,目的是通過祖先元素來代理委派后代元素的事件綁定問題,某種程度上和優(yōu)點(diǎn)相似。相關(guān)資料深入理解新的綁定事件機(jī)制方法的使用新的事件綁定機(jī)制 前言 在開發(fā)項(xiàng)目的時(shí)候,JQuery的使用極其廣泛,如果腦海中沒有一點(diǎn)JQuery的基礎(chǔ)知識(shí),隨性編寫,那么就有可能造成bug問題。JQuery 1.4版本之后新增了on方法,這個(gè)...
閱讀 3078·2021-11-25 09:43
閱讀 2844·2021-10-09 09:44
閱讀 2970·2021-09-22 15:49
閱讀 2763·2021-09-01 11:43
閱讀 2696·2019-08-30 14:16
閱讀 604·2019-08-29 17:24
閱讀 3172·2019-08-29 14:00
閱讀 1536·2019-08-29 13:05