成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

愛(ài)不釋手的Ajax

Flink_China / 2477人閱讀

摘要:簡(jiǎn)而言之,可以讓向服務(wù)器提出請(qǐng)求并處理響應(yīng),而不阻塞用戶。請(qǐng)求在處理中通常響應(yīng)中已有部分?jǐn)?shù)據(jù)可用了,但是服務(wù)器還沒(méi)有完成響應(yīng)的生成。響應(yīng)已完成已經(jīng)接收到全部響應(yīng)數(shù)據(jù),而且已經(jīng)可以在客戶端使用了。

什么是Ajax?為什么要使用它?

Ajax全稱 Asynchronous(異步) JavaScript and XML,終結(jié)了“單擊,等待”的交互模式,它是指一種創(chuàng)建交互式網(wǎng)頁(yè)應(yīng)用的網(wǎng)頁(yè)開(kāi)發(fā)技術(shù),Ajax并不是一種技術(shù),它是一系列規(guī)范的集合,包含:

基于web標(biāo)準(zhǔn)(standards-basedpresentation)XHTML+CSS的表示;

使用 DOM(Document ObjectModel)進(jìn)行動(dòng)態(tài)顯示及交互;

使用 XML 和 XSLT 進(jìn)行數(shù)據(jù)交換及相關(guān)操作;

使用 XMLHttpRequest 進(jìn)行異步數(shù)據(jù)查詢、檢索;

使用 JavaScript 將所有的東西綁定在一起。

Ajax應(yīng)用程序的優(yōu)勢(shì)在于:

通過(guò)異步模式,提升了用戶體驗(yàn)

優(yōu)化了瀏覽器和服務(wù)器之間的傳輸,減少不必要的數(shù)據(jù)往返,減少了帶寬占用

Ajax引擎在客戶端運(yùn)行,承擔(dān)了一部分本來(lái)由服務(wù)器承擔(dān)的工作,從而減少了大用戶量下的服務(wù)器負(fù)載。

基礎(chǔ)-HTTP協(xié)議

在使用Ajax之前,必須先了解客戶端和服務(wù)器間通信的基礎(chǔ)是怎樣的,在這里,他們使用的規(guī)則是HTTP協(xié)議,兩者之間通過(guò)一定格式的報(bào)文(請(qǐng)求報(bào)文和響應(yīng)報(bào)文)進(jìn)行交流,詳細(xì)的看這篇文章。鏈接:http://www.jianshu.com/p/8163...

核心-XMLHttpRequest對(duì)象

支撐起Ajax大橋的便是XHR這個(gè)對(duì)象了,它是一種支持異步請(qǐng)求的技術(shù)。簡(jiǎn)而言之,XmlHttpRequest可以讓JavaScript向服務(wù)器提出請(qǐng)求并處理響應(yīng),而不阻塞用戶。通過(guò)XMLHttpRequest對(duì)象,Web開(kāi)發(fā)人員可以在頁(yè)面加載以后進(jìn)行頁(yè)面的局部更新。
在使用它之前,我們先來(lái)了解一下XHR對(duì)象,簡(jiǎn)單起見(jiàn)。關(guān)于不同瀏覽器之間的XHR對(duì)象暫時(shí)不敘述,直接使用原生XHR對(duì)象,在瀏覽器里面創(chuàng)建一個(gè)新的XHR對(duì)象var xhr = new XMLHttpRequest();,在調(diào)試窗口里面輸出它可以看到:


它是一個(gè)對(duì)象,擁有一些屬性,常見(jiàn)的如下:

readyState:該屬性表示請(qǐng)求/響應(yīng)過(guò)程的當(dāng)前活動(dòng)階段,可用取值如下:

0:請(qǐng)求未初始化(還沒(méi)有調(diào)用?open())。
1:請(qǐng)求已經(jīng)建立,但是還沒(méi)有發(fā)送(還沒(méi)有調(diào)用?send())。
2:請(qǐng)求已發(fā)送,正在處理中(通常現(xiàn)在可以從響應(yīng)中獲取內(nèi)容頭)。
3:請(qǐng)求在處理中;通常響應(yīng)中已有部分?jǐn)?shù)據(jù)可用了,但是服務(wù)器還沒(méi)有完成響應(yīng)的生成。
4:響應(yīng)已完成;已經(jīng)接收到全部響應(yīng)數(shù)據(jù),而且已經(jīng)可以在客戶端使用了。

只要readyState屬性的值發(fā)生變化,便可以觸發(fā)readystatechange事件,下面來(lái)體驗(yàn)一下。

//演示readystatechange事件
var log = function(tmp){
    console.log(tmp);
};
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
    log(xhr.readyState);
};
xhr.open("get","./content.txt",true);
xhr.send(null);

觀察運(yùn)行結(jié)果,可以很明確地看到狀態(tài)的發(fā)生改變。

responseText:作為響應(yīng)主體被返回的文本,無(wú)論內(nèi)容類型是什么,響應(yīng)主體的內(nèi)容都會(huì)保存在這里。

responseXML:如果響應(yīng)的內(nèi)容類型是text/xmlapplication/xml,這個(gè)屬性中將保存著響應(yīng)數(shù)據(jù)的XML DOM文檔。

status:響應(yīng)的HTTP狀態(tài),就是HTTP的狀態(tài)代碼,200,304(表示請(qǐng)求的資源沒(méi)有被修改,可以直接使用瀏覽器中緩存的版本)這些,確保接收到適當(dāng)?shù)捻憫?yīng)

statusText:HTTP狀態(tài)的說(shuō)明

基礎(chǔ)用法
var xhr = new XMLHttpRequest();
//創(chuàng)建一個(gè)XHR對(duì)象
xhr.open("get","test.txt",true);
//啟動(dòng)一個(gè)請(qǐng)求以備發(fā)送,這個(gè)時(shí)候xhr的readyState為1
xhr.send(null);
//正式發(fā)送請(qǐng)求,readyState為2,隨后請(qǐng)求成功,readyState為4

我們來(lái)詳細(xì)說(shuō)一下細(xì)節(jié)。

首先是open方法:
第一個(gè)參數(shù)是HTTP的請(qǐng)求方式,常用的比如getpost,第二個(gè)參數(shù)是請(qǐng)求的url,如果是get方式的話那么一般請(qǐng)求的參數(shù)就附加在這里。第三個(gè)參數(shù)是控制同步或者異步,true表示異步,false表示同步。簡(jiǎn)單來(lái)說(shuō),如果使用同步的話,那么會(huì)阻塞后面的代碼,必須等到本次請(qǐng)求完畢才可以,異步則是另開(kāi)一個(gè)線程去執(zhí)行ajax,下面代碼繼續(xù)進(jìn)行。

再說(shuō)send方法:
send方法有一個(gè)參數(shù),這個(gè)參數(shù)將被寫(xiě)入到請(qǐng)求報(bào)文里面?zhèn)鬟f,上面說(shuō)到了get方式的參數(shù)是直接寫(xiě)到url里面的,所以對(duì)于這種方法,send的參數(shù)應(yīng)該為null,而對(duì)于post方式,url和請(qǐng)求參數(shù)是分離的,所以需要寫(xiě)入到send方法里。

HTTP頭部信息

我們可以使用已有的API來(lái)對(duì)上面創(chuàng)建的請(qǐng)求報(bào)文進(jìn)行增添或?qū)憫?yīng)報(bào)文進(jìn)行處理,比如設(shè)置Cookie。

xhr.setRequestHeader("imake","myValue");//添加頭部信息
xhr.getResponseHeader(headerName);//獲取頭部信息
xhr.getAllResponseHeaders();//獲取全部頭部信息
GET請(qǐng)求

GET方法將需要查詢的字符串追加到URL的末尾,也就是在XHR的open方法的URL末尾進(jìn)行添加,需要進(jìn)行encodeURIComponent()處理,對(duì)此封裝函數(shù)如下:

function addURLParam(url,name,value){
    url+=(url.indexOf("?") == -1 ? "?" : "&");
    url+=encodeURIComponent(name)+"="+encodeURIComponent(value);
}
xhr.open("get",url,true);

POST請(qǐng)求

討論P(yáng)OST之前,我們先回想一下,POST主要用在表單提交,表單提交的寫(xiě)法很多,比如:



我用來(lái)提交表單
var sub = document.getElementById("submit");
sub.addEventListener("click",function(){
    document.getElementById("test").submit();
});

前兩種方式在使用的時(shí)候非常不便,比如我們?cè)贆z測(cè)它們點(diǎn)擊之前需要進(jìn)行表單驗(yàn)證,那么因?yàn)樗鼈冏陨砭哂心J(rèn)的提交功能,所以我們得把它們的默認(rèn)功能阻止一下,所以使用第三種比較舒服。
在表單進(jìn)行post時(shí),背地里它將請(qǐng)求的Content-Type設(shè)置為了application/x-www-form-urlencoded(這種類型是上傳不了文件的,先挖個(gè)坑),并且把表單序列化了。我們來(lái)演示一下:


明白了傳統(tǒng)的post表單提交之后,我們來(lái)說(shuō)說(shuō)Ajax,其實(shí)它也是模仿表單提交,所以要主動(dòng)地告訴服務(wù)器,我是post方式,比較復(fù)雜,你做好準(zhǔn)備,所以要設(shè)置Content-Type頭部信息為application/x-www-form-urlencoded,其次是對(duì)表單進(jìn)行序列化,我們可以使用jQuery里面的serialize()方法,測(cè)試如下:

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/87103.html

相關(guān)文章

  • Promise & Generator——幸福地用同步方法寫(xiě)異步JavaScript

    摘要:在這里看尤雨溪大神的這篇小短文,非常精簡(jiǎn)扼要地介紹了當(dāng)前常用的。根據(jù)尤雨溪大神的說(shuō)法,的也只是的語(yǔ)法糖而已。對(duì)象有三種狀態(tài),,。對(duì)象通過(guò)和方法來(lái)規(guī)定異步結(jié)束之后的操作正確處理函數(shù)錯(cuò)誤處理函數(shù)。方便進(jìn)行后續(xù)的成功處理或者錯(cuò)誤處理。 最近在寫(xiě)一個(gè)自己的網(wǎng)站的時(shí)候(可以觀摩一下~Colors),在無(wú)意識(shí)中用callback寫(xiě)了一段嵌套了5重回調(diào)函數(shù)的可怕的代碼?;剡^(guò)神來(lái)的時(shí)候被自己嚇了一跳,...

    Harpsichord1207 評(píng)論0 收藏0
  • 前端學(xué)習(xí)資源

    摘要:掘金日?qǐng)?bào)第四期使用怎么能不知道這些插件合集掘金日?qǐng)?bào)主打分享優(yōu)質(zhì)深度技術(shù)內(nèi)容,技術(shù)內(nèi)容分前端后端產(chǎn)品設(shè)計(jì)工具資源和一些有趣的東西。目前已經(jīng)涵蓋了的相關(guān)資源鏈接,供大家參考與學(xué)習(xí)。 【掘金日?qǐng)?bào)】第四期 使用Sublime?怎么能不知道這些 Sublime 插件合集! 掘金日?qǐng)?bào)主打分享優(yōu)質(zhì)深度技術(shù)內(nèi)容,技術(shù)內(nèi)容分:前端、后端、Android、iOS、產(chǎn)品設(shè)計(jì)、工具資源和一些有趣的東西。 前端...

    xzavier 評(píng)論0 收藏0
  • 前端學(xué)習(xí)資源

    摘要:掘金日?qǐng)?bào)第四期使用怎么能不知道這些插件合集掘金日?qǐng)?bào)主打分享優(yōu)質(zhì)深度技術(shù)內(nèi)容,技術(shù)內(nèi)容分前端后端產(chǎn)品設(shè)計(jì)工具資源和一些有趣的東西。目前已經(jīng)涵蓋了的相關(guān)資源鏈接,供大家參考與學(xué)習(xí)。 【掘金日?qǐng)?bào)】第四期 使用Sublime?怎么能不知道這些 Sublime 插件合集! 掘金日?qǐng)?bào)主打分享優(yōu)質(zhì)深度技術(shù)內(nèi)容,技術(shù)內(nèi)容分:前端、后端、Android、iOS、產(chǎn)品設(shè)計(jì)、工具資源和一些有趣的東西。 前端...

    weij 評(píng)論0 收藏0
  • Java中那些讓你愛(ài)不釋手工具庫(kù),精煉代碼量

    摘要:使用是為了更高效的性能。注意將數(shù)組轉(zhuǎn)集合不能進(jìn)行和操作。的內(nèi)部類和都是繼承,等方法中是默認(rèn)而且不作任何操作。重新了這些方法而的內(nèi)部類沒(méi)有重新,所以會(huì)拋出異常。八玩轉(zhuǎn)工具包是什么顧名思義,和的區(qū)別就是可以保存多個(gè)相同的對(duì)象。 Java中那些讓你愛(ài)不釋手工具庫(kù),精煉代碼量一、JDK1.8 Stream新特性1、St...

    番茄西紅柿 評(píng)論0 收藏2637

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<