摘要:需要注意的是,并不是的替代品,兩者各自有其適應(yīng)的場(chǎng)景。但為了方便交流,我們通常將獲取資源的一方稱為客戶端主要的工具是瀏覽器,而將派發(fā)資源的一方稱為服務(wù)端又稱為服務(wù)器。它可以幫助我們?yōu)橹蟾拍罴?xì)節(jié)的學(xué)習(xí)打下良好基礎(chǔ)。
“再也不學(xué)AJAX了”是一個(gè)與AJAX主題相關(guān)的文章系列,包含以下三個(gè)部分的內(nèi)容:
AJAX概述:主要回答“AJAX是什么”這個(gè)問題;
使用AJAX:介紹如何通過JavaScript發(fā)送AJAX請(qǐng)求;
跨域獲取數(shù)據(jù):介紹了與“跨域發(fā)送AJAX請(qǐng)求”相關(guān)的一些內(nèi)容:比如“瀏覽器同源策略”與四種跨域請(qǐng)求資源的方式:JSONP,CORS,postMessage和webSocket;
希望通過閱讀該系列三個(gè)部分的內(nèi)容,你能夠徹底理解并掌握AJAX技術(shù),從此再也不用專門學(xué)習(xí)AJAX。
讓我們開始吧 ?。
一、什么是AJAX?AJAX是“Asynchronous JavaScript And XML”的縮寫(即:異步的JavaScript和XML),是一種實(shí)現(xiàn)無(wú)頁(yè)面刷新獲取服務(wù)器數(shù)據(jù)的混合技術(shù)。
讓我們停下來(lái)好好思考一下這個(gè)定義,注意那些醒目的藍(lán)色文字,它們出現(xiàn)在那里不是沒有理由的。
好的,相信你已經(jīng)對(duì)這個(gè)定義有些印象,現(xiàn)在讓我對(duì)那些藍(lán)色的文字做些說(shuō)明:
(一)XML是什么?XML是“Extensible Markup Language”的縮寫(即:可拓展標(biāo)記語(yǔ)言),是一種特征類似HTML,用來(lái)描述數(shù)據(jù)是什么,并承載數(shù)據(jù)的標(biāo)記語(yǔ)言,你可以在中文的維基百科中看到更完整的解釋,但我們現(xiàn)在只要知道它是一種用來(lái)承載數(shù)據(jù)的語(yǔ)言就足夠了。
而JSON僅僅是一種數(shù)據(jù)格式,在JSON發(fā)明之前,人們大量使用XML作為數(shù)據(jù)傳輸?shù)妮d體,也正因如此,AJAX技術(shù)的最后一個(gè)字母為“X”。而如今情況則發(fā)生了些變化,JSON這種類似于字符串對(duì)象的輕量級(jí)的數(shù)據(jù)格式越來(lái)越受到開發(fā)者青睞,幾乎變成了AJAX技術(shù)的標(biāo)準(zhǔn)數(shù)據(jù)格式,因此好像AJAX技術(shù)如今應(yīng)該換個(gè)名字,叫做“AJAJ”,呃,還是算了吧。
需要注意的是,JSON并不是XML的替代品,兩者各自有其適應(yīng)的場(chǎng)景。如果你對(duì)這兩種數(shù)據(jù)格式的差異感興趣,可以查看以下鏈接:
為什么XML這么笨重的數(shù)據(jù)結(jié)構(gòu)仍在廣泛應(yīng)用?
為什么都反對(duì)XML而支持使用JSON
Stop Comparing JSON and XML
JSON and XML comparison
(二)無(wú)頁(yè)面刷新?我們知道,互聯(lián)網(wǎng)最主要的功能在于“資源交換”,當(dāng)初發(fā)明互聯(lián)網(wǎng)的科學(xué)家們也是基于這個(gè)動(dòng)機(jī)。雖然在互聯(lián)網(wǎng)中“資源交換”的主體都是計(jì)算機(jī)。但為了方便交流,我們通常將獲取資源的一方稱為客戶端(主要的工具是瀏覽器),而將派發(fā)資源的一方稱為服務(wù)端(又稱為“服務(wù)器”)。
在AJAX技術(shù)出現(xiàn)之前,如果瀏覽器需要從服務(wù)器請(qǐng)求資源,其交互模式為“客戶端發(fā)出請(qǐng)求 -> 服務(wù)端接收請(qǐng)求并返回相應(yīng)HTML文檔 -> 頁(yè)面刷新,客戶端加載新的HTML文檔”。確實(shí),這種交互模式十分簡(jiǎn)潔明了,而且非常符合人的直覺,對(duì)于那時(shí)游走于互聯(lián)網(wǎng)中的極客而言,也確實(shí)夠用了。但是隨著時(shí)代的進(jìn)步,互聯(lián)網(wǎng)漸漸不只是極客們的娛樂場(chǎng),越來(lái)越多商業(yè)化網(wǎng)站的出現(xiàn),使互聯(lián)網(wǎng)不再局限于滿足人們“資源交換”的需求,人們開始期待能夠在互聯(lián)網(wǎng)中獲得更好的“使用體驗(yàn)”,而隨著用戶點(diǎn)擊不斷刷新頁(yè)面的交互方式顯然很難討人喜歡。
再試想這樣一種情景,當(dāng)用戶點(diǎn)擊頁(yè)面中的某個(gè)按鈕向服務(wù)器發(fā)送請(qǐng)求時(shí),頁(yè)面本質(zhì)上只是一些數(shù)據(jù)發(fā)生了變化,而此時(shí)服務(wù)器卻要將重繪的整個(gè)頁(yè)面再返回給瀏覽器加載,這顯然有悖于程序員的“DRY”原則,而且明明只是一些數(shù)據(jù)的變化卻迫使服務(wù)器要返回整個(gè)HTML文檔,這本身也會(huì)給網(wǎng)絡(luò)帶寬帶來(lái)不必要的開銷。
有沒有辦法在頁(yè)面數(shù)據(jù)變動(dòng)時(shí),只向服務(wù)器請(qǐng)求新的數(shù)據(jù),并且在阻止頁(yè)面刷新的情況下,動(dòng)態(tài)的替換頁(yè)面中展示的數(shù)據(jù)呢? -- 答案正是“AJAX”。
AJAX技術(shù)的問世,不僅通過阻止瀏覽器接受響應(yīng)時(shí)刷新頁(yè)面提升了互聯(lián)網(wǎng)用戶的使用體驗(yàn),還使開發(fā)者能夠以更加微觀的視角重新思考互聯(lián)網(wǎng)應(yīng)用的構(gòu)建,從此,開發(fā)者將在“數(shù)據(jù)”層面而不是“資源”層面以更高的自由度構(gòu)建網(wǎng)站和Web應(yīng)用。
(三)混合技術(shù)?是的,AJAX技術(shù)并不只是操作XMLHttpRequest對(duì)象發(fā)起異步請(qǐng)求,而是為了實(shí)現(xiàn)“無(wú)頁(yè)面刷新的資源獲取”的一些列技術(shù)的統(tǒng)稱,這些技術(shù)包括了:
JavaScript:用來(lái)在獲取數(shù)據(jù)后,通過操作DOM或其他方式達(dá)成目標(biāo);
客戶端(即瀏覽器)提供的實(shí)現(xiàn)異步服務(wù)器通信的XMLHttpRequest對(duì)象;
服務(wù)器端允許瀏覽器向其發(fā)起AJAX請(qǐng)求的相關(guān)設(shè)置;
明白AJAX并不只是操作XMLHttpRequest對(duì)象,對(duì)于初學(xué)者而言是十分必要的。
二、AJAX的意義相信你已經(jīng)明白了,AJAX技術(shù)的意義在于:它能夠使瀏覽器在不刷新頁(yè)面的情況下獲取服務(wù)器響應(yīng),這將大大提升互聯(lián)網(wǎng)用戶的使用體驗(yàn),同時(shí),由于AJAX請(qǐng)求獲取的是數(shù)據(jù)而不是HTML文檔,因此它也節(jié)省了網(wǎng)絡(luò)帶寬,讓互聯(lián)網(wǎng)用戶的網(wǎng)絡(luò)沖浪體驗(yàn)變得更加順暢。
同時(shí),我們也應(yīng)該注意到,由于AJAX技術(shù)可以令開發(fā)者只向服務(wù)器獲取數(shù)據(jù)(而不是圖片,HTML文檔等資源),互聯(lián)網(wǎng)資源的傳輸變得前所未有的輕量級(jí)和純粹,這激發(fā)了廣大開發(fā)者的創(chuàng)造力,使各式各樣功能強(qiáng)大的網(wǎng)絡(luò)站點(diǎn),和互聯(lián)網(wǎng)應(yīng)用如雨后春筍一般冒出,不斷帶給人驚喜。
三、小結(jié)本文我們講解了“什么是AJAX”以及“AJAX的意義”,你可能會(huì)覺得一篇技術(shù)文章沒有代碼實(shí)在很古怪,但我覺得在一開始就對(duì)某個(gè)概念建立起正確的心智模型很重要。它可以幫助我們?yōu)橹蟾拍罴?xì)節(jié)的學(xué)習(xí)打下良好基礎(chǔ)。別著急,在下一篇文章中,我們會(huì)花費(fèi)大量篇幅去討論如何使用AJAX技術(shù),希望你保持耐心,Keep Learning,加油!?
? Hey!喜歡這篇文章嗎?別忘了在下方? 點(diǎn)贊讓我知道。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/90063.html
摘要:瀏覽器的同源策略瀏覽器所遵守的同源策略是指限制不同源之間執(zhí)行特定操作。這正是同源策略想要規(guī)避的安全隱患。目前為止,你已經(jīng)充分了解同源策略這個(gè)主題。 我們之前提到過,AJAX技術(shù)使開發(fā)者能夠?qū)W⒂诨ヂ?lián)網(wǎng)中數(shù)據(jù)的傳輸,而不再拘泥于數(shù)據(jù)傳輸?shù)妮d體。通過AJAX技術(shù),我們獲取數(shù)據(jù)的方式變得更加靈活,可控和優(yōu)雅。 但是AJAX技術(shù)并不是一把萬(wàn)能鑰匙,互聯(lián)網(wǎng)中的數(shù)據(jù)隱私和數(shù)據(jù)安全(例如你的銀行賬號(hào)...
摘要:一基于維基百科的定義,是一種在單個(gè)連接上進(jìn)行全雙工通訊的協(xié)議。讓我們看看這個(gè)模型的具體實(shí)現(xiàn)下面是客戶端告知服務(wù)端要升級(jí)為協(xié)議的報(bào)頭下面是服務(wù)端向客戶端返回的響應(yīng)報(bào)頭想知道這些報(bào)頭中的字段中代表什么可以參考維基百科下的說(shuō)明。 讓我們先簡(jiǎn)單回顧一下之前談到的內(nèi)容,AJAX是一種無(wú)頁(yè)面刷新的獲取服務(wù)器資源的混合技術(shù)。而基于瀏覽器的同源策略,不同域之間不可以發(fā)送AJAX請(qǐng)求。但是在某些情境下,...
摘要:隨著對(duì)象被廣泛的接收,也開始著手制定相應(yīng)的標(biāo)準(zhǔn)來(lái)規(guī)范其行為。四設(shè)置請(qǐng)求頭每個(gè)請(qǐng)求和響應(yīng)都會(huì)帶有相應(yīng)的頭部信息,包含一些與數(shù)據(jù),收發(fā)者網(wǎng)絡(luò)環(huán)境與狀態(tài)等相關(guān)信息。該方法會(huì)令對(duì)象實(shí)例停止觸發(fā)事件,并且不再允許訪問任何和響應(yīng)有關(guān)的對(duì)象屬性。 在上一篇文章中我們知道,AJAX是一系列技術(shù)的統(tǒng)稱。在本篇中我們將更進(jìn)一步,詳細(xì)解釋如何使用Ajax技術(shù)在項(xiàng)目中獲取數(shù)據(jù)。而為了解釋清楚,我們首先要搞清楚...
摘要:瀏覽器的同源策略固然保障了互聯(lián)網(wǎng)世界的數(shù)據(jù)隱私與數(shù)據(jù)安全,但是如果當(dāng)我們需要使用跨域請(qǐng)求資源時(shí),同源策略又會(huì)成為開發(fā)者的阻礙。我們之前提到過,如果想要繞過瀏覽器同源策略,實(shí)現(xiàn)使用技術(shù)跨域獲取資源,需要服務(wù)端和客戶端的協(xié)同合作。 瀏覽器的同源策略固然保障了互聯(lián)網(wǎng)世界的數(shù)據(jù)隱私與數(shù)據(jù)安全,但是如果當(dāng)我們需要使用AJAX跨域請(qǐng)求資源時(shí),同源策略又會(huì)成為開發(fā)者的阻礙。在本文中,我們會(huì)簡(jiǎn)單介紹需...
摘要:請(qǐng)求數(shù)據(jù)流程與領(lǐng)導(dǎo)想找小李匯報(bào)一下工作類似。表示從客戶端發(fā)來(lái)的請(qǐng)求在服務(wù)器端被正常處理了。表示永久性重定向。該狀態(tài)碼表示請(qǐng)求的資源已被分配了新的,以后應(yīng)使用資源現(xiàn)在所指的。表示服務(wù)器端在執(zhí)行請(qǐng)求時(shí)發(fā)生了錯(cuò)誤。 前言 AJAX即Asynchronous Javascript And XML,是指一種創(chuàng)建交互式網(wǎng)頁(yè)應(yīng)用的網(wǎng)頁(yè)開發(fā)技術(shù)。AJAX 是一種用于創(chuàng)建快速動(dòng)態(tài)網(wǎng)頁(yè)的技術(shù)。它可以令開發(fā)...
閱讀 3467·2021-11-17 17:00
閱讀 3832·2021-08-09 13:46
閱讀 2875·2019-08-30 15:54
閱讀 639·2019-08-30 13:54
閱讀 2952·2019-08-29 17:13
閱讀 3230·2019-08-29 14:00
閱讀 2983·2019-08-29 11:11
閱讀 1393·2019-08-26 10:15