摘要:創(chuàng)建對(duì)象指定響應(yīng)函數(shù)打開(kāi)連接指定請(qǐng)求發(fā)送請(qǐng)求創(chuàng)建響應(yīng)函數(shù)注第三步是使用對(duì)象的方法,字面意思是打開(kāi)的意思,即打開(kāi)連接。
前言
博主博客:Stillwater的博客
知乎專(zhuān)欄:前端汪汪
本文為作者原創(chuàng)轉(zhuǎn)載請(qǐng)注明出處:
http://hiztx.top/2017/01/12/a...
一、手寫(xiě)AJAX的步驟在前端面試的時(shí)候經(jīng)常會(huì)有如下情景。AJAX會(huì)嗎?能不能手寫(xiě)個(gè)AJAX?第一個(gè)問(wèn)題可以參見(jiàn)我的另一篇博客,AJAX總結(jié)(一),AJAX概述。這篇博文我們來(lái)回答第二個(gè)問(wèn)題,手寫(xiě)AJAX。
??手寫(xiě)AJAX并沒(méi)有一個(gè)固定的標(biāo)準(zhǔn)的答案,但是AJAX的關(guān)鍵步驟就那么幾步,我會(huì)先用文字介紹關(guān)鍵步驟,然后給出兩個(gè)版本的手寫(xiě)AJAX的代碼及注釋。幫助大家很好地理解和記憶。
創(chuàng)建XMLHttpRequest對(duì)象
指定響應(yīng)函數(shù)
打開(kāi)連接(指定請(qǐng)求)
發(fā)送請(qǐng)求
創(chuàng)建響應(yīng)函數(shù)
注:第三步是使用XMLHttpRequest對(duì)象的open()方法,字面意思o(jì)pen是打開(kāi)的意思,即打開(kāi)連接。但是準(zhǔn)確的說(shuō)應(yīng)該是指定Http請(qǐng)求。因?yàn)闉g覽器在使用AJAX技術(shù)與服務(wù)通信時(shí),發(fā)送的是Http請(qǐng)求,那么就要指定Http的請(qǐng)求方法,url等信息。
二、參考代碼(W3C)var xmlhttp=null;//聲明一個(gè)變量,用來(lái)實(shí)例化XMLHttpRequest對(duì)象 if (window.XMLHttpRequest) { xmlhttp=new XMLHttpRequest();// 新版本的瀏覽器可以直接創(chuàng)建XMLHttpRequest對(duì)象 } else if (window.ActiveXObject) { xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");// IE5或IE6沒(méi)有XMLHttpRequest對(duì)象,而是用的ActiveXObject對(duì)象 } if (xmlhttp!=null) { xmlhttp.onreadystatechange=state_Change;//指定響應(yīng)函數(shù)為state_Change xmlhttp.open("GET","/example/xdom/note.xml",true);//指定請(qǐng)求,這里要訪問(wèn)在/example/xdom路徑下的note.xml文件,true代表的使用的是異步請(qǐng)求 xmlhttp.send(null);//發(fā)送請(qǐng)求 } else { alert("Your browser does not support XMLHTTP."); } //創(chuàng)建具體的響應(yīng)函數(shù)state_Change function state_Change() { if (xmlhttp.readyState==4) { if (xmlhttp.status==200) { // 這里應(yīng)該是函數(shù)具體的邏輯 } else { alert("Problem retrieving XML data"); } } }
創(chuàng)建XMLHttpRequest對(duì)象 (1-10行代碼)
指定響應(yīng)函數(shù)(第15行代碼)
打開(kāi)連接(指定請(qǐng)求)(第16行代碼)
發(fā)送請(qǐng)求(第18行代碼)
創(chuàng)建響應(yīng)函數(shù)(25-38行代碼)
??這個(gè)是W3C上講解AJAX的代碼,比較權(quán)威,我做了一些注釋?zhuān)奖愦蠹依斫狻C嬖嚨臅r(shí)候?qū)戇@段代碼應(yīng)該是沒(méi)有問(wèn)題的。
W3C原文鏈接
Make a request
創(chuàng)建XMLHttpRequest對(duì)象 (第13行代碼)
指定響應(yīng)函數(shù)(第19行代碼)
打開(kāi)連接(指定請(qǐng)求)(第21行代碼)
發(fā)送請(qǐng)求(第23行代碼)
創(chuàng)建響應(yīng)函數(shù)(29-37行代碼)
??這個(gè)是MDN上講解AJAX的代碼,我做了一些注釋?zhuān)奖愦蠹依斫狻?br>MDN原文鏈接
四、總結(jié)這篇文章講解了如何較為規(guī)范的手寫(xiě)AJAX,下篇文章我會(huì)具體介紹XMLHttpRequest對(duì)象的有關(guān)知識(shí)以及AJAX相關(guān)的Http請(qǐng)求的知識(shí)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/81185.html
摘要:從而達(dá)到了軟刪除。不過(guò),你可以通過(guò)在查詢中調(diào)用方法來(lái)強(qiáng)制查詢已被軟刪除的模型方法也可以被用在關(guān)聯(lián)查詢只取出軟刪除數(shù)據(jù)會(huì)只取出軟刪除數(shù)據(jù)恢復(fù)被軟刪除的模型有時(shí)候你可能希望取消刪除一個(gè)已被軟刪除的模型。 Laravel 有三寶,路由、容器和 Eloquent ORM,Eloquent ORM。我個(gè)人一直比較推薦于在實(shí)際操作中學(xué)習(xí),之前簡(jiǎn)單了解了路由和Eloquent ORM的基本用法,今天...
摘要:所以瀏覽器認(rèn)為這是安全的。如果你細(xì)心的話你會(huì)發(fā)現(xiàn),其實(shí)請(qǐng)求已經(jīng)發(fā)送出去了,你只是拿不到響應(yīng)而已。所以瀏覽器這個(gè)策略的本質(zhì)是,一個(gè)域名的,在未經(jīng)允許的情況下,不得讀取另一個(gè)域名的內(nèi)容。但瀏覽器并不阻止你向另一個(gè)域名發(fā)送請(qǐng)求。 同源策略與CORS跨域 PS:這篇文章是緊接著JSONP原理和Ajax學(xué)習(xí)與理解寫(xiě)的,有些內(nèi)容是承接了上兩篇文章.這篇文章只算是我的個(gè)人學(xué)習(xí)筆記,內(nèi)容沒(méi)有經(jīng)過(guò)精心排...
摘要:在事件中,我們規(guī)定當(dāng)服務(wù)器響應(yīng)已做好被處理的準(zhǔn)備時(shí)所執(zhí)行的任務(wù)。當(dāng)?shù)扔谇覡顟B(tài)為時(shí),表示響應(yīng)已就緒完整版可以加個(gè)簡(jiǎn)化版看前面的就行了請(qǐng)求成功看前面的就行了 在 onreadystatechange 事件中,我們規(guī)定當(dāng)服務(wù)器響應(yīng)已做好被處理的準(zhǔn)備時(shí)所執(zhí)行的任務(wù)。當(dāng) readyState 等于 4 且狀態(tài)為 200 時(shí),表示響應(yīng)已就緒: //完整版 var request = new XM...
摘要:及相關(guān)問(wèn)題數(shù)據(jù)類(lèi)型函數(shù)中指向原型作用域閉包面向?qū)ο髮?duì)象創(chuàng)建模式繼承嚴(yán)格模式與對(duì)象轉(zhuǎn)換的方法添加屬性,根據(jù)原型創(chuàng)建區(qū)別新特性解構(gòu)賦值簡(jiǎn)化對(duì)象寫(xiě)法剪頭函數(shù)三點(diǎn)運(yùn)算符模板字符串形參默認(rèn)值異步過(guò)程深拷貝與淺拷貝賦值與淺拷貝的區(qū)別淺拷貝的幾種方法實(shí)現(xiàn) js及es相關(guān)問(wèn)題 數(shù)據(jù)類(lèi)型函數(shù)中this指向——————原型作用域閉包——————面向?qū)ο髮?duì)象創(chuàng)建模式繼承——————Es5嚴(yán)格模式Json與j...
摘要:及相關(guān)問(wèn)題數(shù)據(jù)類(lèi)型函數(shù)中指向原型作用域閉包面向?qū)ο髮?duì)象創(chuàng)建模式繼承嚴(yán)格模式與對(duì)象轉(zhuǎn)換的方法添加屬性,根據(jù)原型創(chuàng)建區(qū)別新特性解構(gòu)賦值簡(jiǎn)化對(duì)象寫(xiě)法剪頭函數(shù)三點(diǎn)運(yùn)算符模板字符串形參默認(rèn)值異步過(guò)程深拷貝與淺拷貝賦值與淺拷貝的區(qū)別淺拷貝的幾種方法實(shí)現(xiàn) js及es相關(guān)問(wèn)題 數(shù)據(jù)類(lèi)型函數(shù)中this指向——————原型作用域閉包——————面向?qū)ο髮?duì)象創(chuàng)建模式繼承——————Es5嚴(yán)格模式Json與j...
閱讀 3652·2021-09-02 15:11
閱讀 4563·2021-08-16 10:47
閱讀 1560·2019-08-29 18:35
閱讀 3030·2019-08-28 17:54
閱讀 2843·2019-08-26 11:37
閱讀 1496·2019-08-23 16:51
閱讀 1799·2019-08-23 14:36
閱讀 1801·2019-08-23 14:21