摘要:目前原生和已經(jīng)形式猛如虎。如果原生對象不存在,則檢測對象。此時(shí),可以檢測對象的屬性,該屬性表示請求響應(yīng)過程的當(dāng)前活動階段。
目前原生Ajax和.ajax已經(jīng)形式猛如虎。這一技術(shù)能夠向服務(wù)器請求額外的數(shù)據(jù)而無須卸載頁面,會帶來更好的用戶體驗(yàn)。Ajax技術(shù)的核心是XMLHttpRequest對象,這是由微軟首先引入的一種特性,其他瀏覽器供應(yīng)商后來都提供了相同的實(shí)現(xiàn)。在重命名為Ajax之后,大約是2005年底2006年初,這種瀏覽器與服務(wù)器的通信技術(shù)可謂是紅極一時(shí)。人們對Javascript和Web的全新認(rèn)識,催生了很多使用原有特性的新技術(shù)和新模式。就目前來說,熟悉使用XHR對象已經(jīng)成為所有Web開發(fā)人員必須掌握的一種技能。
最早在IE5中,XHR對象是通過MSXML庫中的一個(gè)ActiveX對象實(shí)現(xiàn)的。要使用MSXML庫中的XHR對象,想支持IE7以及更高版本,需要編寫一個(gè)函數(shù):
function createXHR(){ if (typeof XMLHttpRequest != "undefined") { return new XMLHttpRequest(); } IE7及以下 else if (typeof ActiveXObject!="undefined") { if (typeof arguments.callee.activeXString!="string") { var versions = ["MSXML2.XMLHttp.6.0","MSXML2.XNLHttp.3.0","MSXML2.XMLHttp"],i,len; for (i=0,len=versions.length; i這個(gè)函數(shù)中新增的代碼首先監(jiān)測原生XHR對象是否存在,如果存在則返回它的新實(shí)例。如果原生對象不存在,則檢測ActiveX對象。如果這兩種對象都不存在,就拋出一個(gè)錯(cuò)誤。然后,就可以使用下面的代碼在所有瀏覽器中創(chuàng)建XHR對象。
var xhr = createXHR();在使用XHR對象時(shí),要調(diào)用的第一個(gè)辦法是open(),它接受三個(gè)參數(shù):要發(fā)送的請求的類型(‘get’、’post’等)、請求的URL和表示是否異步請求的布爾值。下面就是調(diào)用這個(gè)方法的例子:
xhr.open("get","http://120.78.164.247:9999/user/findAll", false);這行代碼會啟動一個(gè)針對http://120.78.164.247:9999/user/findAll的GET請求。要發(fā)送特定的請求,必須像下面這樣調(diào)用send()方法:
xhr.open("get","http://120.78.164.247:9999/user/findAll", false); xhr.send(null);這里的send()方法接受一個(gè)參數(shù),即要作為請求主體發(fā)送的數(shù)據(jù)。如果不需要通過請求主體發(fā)送數(shù)據(jù),則必須傳入null,因?yàn)檫@個(gè)參數(shù)對有些瀏覽器來說是必需的。調(diào)用send()之后,請求就會被分配到服務(wù)器。
在接收到響應(yīng)后,第一步是檢查status屬性,以確定響應(yīng)已經(jīng)成功返回。一般來說,可以將HTTP狀態(tài)代碼為200作為成功的標(biāo)志。此時(shí),responseText屬性的內(nèi)容已經(jīng)就緒,而且在內(nèi)容類型正確的情況下,responseXML也應(yīng)該能夠訪問了。此外,狀態(tài)代碼為304表示請求的資源并沒有被修改,可以直接使用瀏覽器中緩存的版本;當(dāng)然,也意味著響應(yīng)是有效的。為確保接收到適當(dāng)?shù)捻憫?yīng),應(yīng)該像下面檢查上述這兩種狀態(tài)代碼:
if ((xhr.status>=200&&xhr.status<300)||xhr.status==304) { alert(xhr.responseText); }else { alert("Request was unsuccessful:"+xhr.status); }像前面這樣發(fā)送同步請求當(dāng)然沒有問題,但多數(shù)情況下,我們還是要求發(fā)送異步請求,才能讓JavaScript繼續(xù)執(zhí)行而不必等待響應(yīng)。此時(shí),可以檢測XHR對象的readyState屬性,該屬性表示請求/響應(yīng)過程的當(dāng)前活動階段。只要readyState屬性的值由一個(gè)值變成另一個(gè)值,都會觸發(fā)一次readystatechange事件??梢岳眠@個(gè)事件來檢測每次狀態(tài)變化后readyState的值。通常,我們只對readyState值為4的階段感興趣,因?yàn)檫@時(shí)所有數(shù)據(jù)都已經(jīng)就緒。不過,必須在調(diào)用open()之前指定onreadystatechange事件處理程序才能確??鐬g覽器兼容性。下面來看一個(gè)例子:
var xhr = createXHR(); xhr.onreadystatechange =function(){ if (xhr.readyState==4) { if ((xhr.status>=200&&xhr.status<300)||xhr.status==304) { alert(xhr.responseText); }else { alert("Request was unsuccessful:"+xhr.status); } } }; xhr.open("get","http://120.78.164.247:9999/user/findAll", false); xhr.send(null);以上代碼利用DOM0級方法為XHR對象添加了事件處理程序,原因是并非所有瀏覽器都支持DOM2級方法。與其他事件處理程序不同,這里沒有向onreadystatechange事件處理程序中傳遞event對象;必須通過XHR對象本身來確定下一步怎么做。
祝大家在日富可敵國,bye~
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/98304.html
摘要:原生與對的實(shí)現(xiàn)一定義里這么解釋異步的和。二原生實(shí)現(xiàn)所有現(xiàn)代瀏覽器以及均內(nèi)建對象。一般是正常未找到頁面,一般是錯(cuò)誤,或者后臺沒有創(chuàng)建相應(yīng)的內(nèi)部服務(wù)錯(cuò)誤,多為后臺錯(cuò)誤?;旧贤ㄟ^發(fā)送的數(shù)據(jù)及傳回的數(shù)據(jù)就能定位問題所在了。 原生JS與jQuery對AJAX的實(shí)現(xiàn) 一、定義 W3C里這么解釋AJAX: AJAX = Asynchronous JavaScript and XML(異步的 Jav...
摘要:一封裝原生的為類以及用法見之前的文章根據(jù)確定請求的頭部以及別的信息。二封裝實(shí)用性的類在項(xiàng)目中經(jīng)常需要將進(jìn)行封裝,使用類發(fā)起請求。請求不帶請求帶請求不帶請求帶請求不帶請求帶這個(gè)方法感覺可以再次進(jìn)行封裝。完整代碼點(diǎn)擊查看以上。 一、封裝原生的xhr為ajax類 xhr以及用法見之前的文章 1、根據(jù)url確定請求的頭部以及別的信息。 var _headerConfig = {}; ...
摘要:作者后臺使用的是語言,所以這里以后臺為例子不影響學(xué)習(xí)一原生使用方法創(chuàng)建對象兼容處理處理低版本不兼容問題準(zhǔn)備發(fā)送請求方式接口參數(shù)名參數(shù)值異步執(zhí)行發(fā)送回調(diào)是表示數(shù)據(jù)解析完成,后臺處理完成了。是表示處理的結(jié)果是的。 作者后臺使用的是php語言,所以這里以php后臺Api為例子,不影響學(xué)習(xí)Ajax 一、 javaScript原生使用Ajax 1.get方法 //1.創(chuàng)建對象 兼容處理 var ...
摘要:一直在用方法來寫請求,用的多了,不免對這其中是怎么實(shí)現(xiàn)的產(chǎn)生了興趣,于是乎,小弟閑來無聊研究了一下原生實(shí)現(xiàn)請求,網(wǎng)上看了很多前輩們的關(guān)于請求的封裝方法,也借鑒了很多經(jīng)驗(yàn),于是乎就出現(xiàn)了小弟的一個(gè)原生封裝的版本,希望大家看了之后能夠明白,下面 一直在用jQuery方法來寫ajax請求,用的多了,不免對這其中是怎么實(shí)現(xiàn)的產(chǎn)生了興趣,于是乎,小弟閑來無聊研究了一下原生實(shí)現(xiàn)ajax請求,網(wǎng)上看...
摘要:一直在用方法來寫請求,用的多了,不免對這其中是怎么實(shí)現(xiàn)的產(chǎn)生了興趣,于是乎,小弟閑來無聊研究了一下原生實(shí)現(xiàn)請求,網(wǎng)上看了很多前輩們的關(guān)于請求的封裝方法,也借鑒了很多經(jīng)驗(yàn),于是乎就出現(xiàn)了小弟的一個(gè)原生封裝的版本,希望大家看了之后能夠明白,下面 一直在用jQuery方法來寫ajax請求,用的多了,不免對這其中是怎么實(shí)現(xiàn)的產(chǎn)生了興趣,于是乎,小弟閑來無聊研究了一下原生實(shí)現(xiàn)ajax請求,網(wǎng)上看...
閱讀 2813·2021-11-22 14:44
閱讀 560·2021-11-22 12:00
閱讀 3694·2019-08-30 15:54
閱讀 1589·2019-08-29 17:15
閱讀 1910·2019-08-29 13:50
閱讀 1126·2019-08-29 13:17
閱讀 3524·2019-08-29 13:05
閱讀 1192·2019-08-29 11:31