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

資訊專欄INFORMATION COLUMN

Ajax原理一篇就夠了

hiYoHoo / 1134人閱讀

摘要:請(qǐng)求數(shù)據(jù)流程與領(lǐng)導(dǎo)想找小李匯報(bào)一下工作類似。表示從客戶端發(fā)來的請(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īng)用的網(wǎng)頁開發(fā)技術(shù)。AJAX 是一種用于創(chuàng)建快速動(dòng)態(tài)網(wǎng)頁的技術(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)用如雨后春筍一般冒出,不斷帶給人驚喜。

本文首發(fā)地址為GitHub博客,寫文章不易,請(qǐng)多多支持與關(guān)注!

一、什么是Ajax

Ajax是一種異步請(qǐng)求數(shù)據(jù)的web開發(fā)技術(shù),對(duì)于改善用戶的體驗(yàn)和頁面性能很有幫助。簡(jiǎn)單地說,在不需要重新刷新頁面的情況下,Ajax 通過異步請(qǐng)求加載后臺(tái)數(shù)據(jù),并在網(wǎng)頁上呈現(xiàn)出來。常見運(yùn)用場(chǎng)景有表單驗(yàn)證是否登入成功、百度搜索下拉框提示和快遞單號(hào)查詢等等。Ajax的目的是提高用戶體驗(yàn),較少網(wǎng)絡(luò)數(shù)據(jù)的傳輸量。同時(shí),由于AJAX請(qǐng)求獲取的是數(shù)據(jù)而不是HTML文檔,因此它也節(jié)省了網(wǎng)絡(luò)帶寬,讓互聯(lián)網(wǎng)用戶的網(wǎng)絡(luò)沖浪體驗(yàn)變得更加順暢。

二、Ajax原理是什么

在解釋Ajax原理之前,我們不妨先舉個(gè)“領(lǐng)導(dǎo)想找小李匯報(bào)一下工作”例子,領(lǐng)導(dǎo)想找小李問點(diǎn)事,就委托秘書去叫小李,自己就接著做其他事情,直到秘書告訴他小李已經(jīng)到了,最后小李跟領(lǐng)導(dǎo)匯報(bào)工作。

Ajax請(qǐng)求數(shù)據(jù)流程與“領(lǐng)導(dǎo)想找小李匯報(bào)一下工作”類似。其中最核心的依賴是瀏覽器提供的XMLHttpRequest對(duì)象,它扮演的角色相當(dāng)于秘書,使得瀏覽器可以發(fā)出HTTP請(qǐng)求與接收HTTP響應(yīng)。瀏覽器接著做其他事情,等收到XHR返回來的數(shù)據(jù)再渲染頁面。

理解了Ajax的工作原理后,接下來我們探討下如何使用Ajax。

三、Ajax的使用 1.創(chuàng)建Ajax核心對(duì)象XMLHttpRequest(記得考慮兼容性)
    1. var xhr=null;  
    2. if (window.XMLHttpRequest)  
    3.   {// 兼容 IE7+, Firefox, Chrome, Opera, Safari  
    4.   xhr=new XMLHttpRequest();  
    5.   } else{// 兼容 IE6, IE5 
    6.     xhr=new ActiveXObject("Microsoft.XMLHTTP");  
    7.   } 
2.向服務(wù)器發(fā)送請(qǐng)求
    1. xhr.open(method,url,async);  
    2. send(string);//post請(qǐng)求時(shí)才使用字符串參數(shù),否則不用帶參數(shù)。

method:請(qǐng)求的類型;GET 或 POST

url:文件在服務(wù)器上的位置

async:true(異步)或 false(同步)

注意:post請(qǐng)求一定要設(shè)置請(qǐng)求頭的格式內(nèi)容

xhr.open("POST","test.html",true);  
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");  
xhr.send("fname=Henry&lname=Ford");  //post請(qǐng)求參數(shù)放在send里面,即請(qǐng)求體
3.服務(wù)器響應(yīng)處理(區(qū)分同步跟異步兩種情況)

responseText 獲得字符串形式的響應(yīng)數(shù)據(jù)。

responseXML 獲得XML 形式的響應(yīng)數(shù)據(jù)。

①同步處理
    1. xhr.open("GET","info.txt",false);  
    2. xhr.send();  
    3. document.getElementById("myDiv").innerHTML=xhr.responseText; //獲取數(shù)據(jù)直接顯示在頁面上
②異步處理

相對(duì)來說比較復(fù)雜,要在請(qǐng)求狀態(tài)改變事件中處理。

    1. xhr.onreadystatechange=function()  { 
    2.    if (xhr.readyState==4 &&xhr.status==200)  { 
    3.       document.getElementById("myDiv").innerHTML=xhr.responseText;  
    4.      }
    5.    } 
什么是readyState?

readyState是XMLHttpRequest對(duì)象的一個(gè)屬性,用來標(biāo)識(shí)當(dāng)前XMLHttpRequest對(duì)象處于什么狀態(tài)。
readyState總共有5個(gè)狀態(tài)值,分別為0~4,每個(gè)值代表了不同的含義

0:未初始化 -- 尚未調(diào)用.open()方法;

1:?jiǎn)?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)可以在客戶端使用了;

什么是status?

HTTP狀態(tài)碼(status)由三個(gè)十進(jìn)制數(shù)字組成,第一個(gè)十進(jìn)制數(shù)字定義了狀態(tài)碼的類型,后兩個(gè)數(shù)字沒有分類的作用。HTTP狀態(tài)碼共分為5種類型:

常見的狀態(tài)碼

僅記錄在 RFC2616 上的 HTTP 狀態(tài)碼就達(dá) 40 種,若再加上 WebDAV(RFC4918、5842)和附加 HTTP 狀態(tài)碼 (RFC6585)等擴(kuò)展,數(shù)量就達(dá) 60 余種。接下來,我們就介紹一下這些具有代表性的一些狀態(tài)碼。

200 表示從客戶端發(fā)來的請(qǐng)求在服務(wù)器端被正常處理了。

204 表示請(qǐng)求處理成功,但沒有資源返回。

301 表示永久性重定向。該狀態(tài)碼表示請(qǐng)求的資源已被分配了新的URI,以后應(yīng)使用資源現(xiàn)在所指的URI。

302 表示臨時(shí)性重定向。

304 表示客戶端發(fā)送附帶條件的請(qǐng)求時(shí)(指采用GET方法的請(qǐng)求報(bào)文中包含if-matched,if-modified-since,if-none-match,if-range,if-unmodified-since任一個(gè)首部)服務(wù)器端允許請(qǐng)求訪問資源,但因發(fā)生請(qǐng)求未滿足條件的情況后,直接返回304Modified(服務(wù)器端資源未改變,可直接使用客戶端未過期的緩存)

400 表示請(qǐng)求報(bào)文中存在語法錯(cuò)誤。當(dāng)錯(cuò)誤發(fā)生時(shí),需修改請(qǐng)求的內(nèi)容后再次發(fā)送請(qǐng)求。

401 表示未授權(quán)(Unauthorized),當(dāng)前請(qǐng)求需要用戶驗(yàn)證

403 表示對(duì)請(qǐng)求資源的訪問被服務(wù)器拒絕了

404 表示服務(wù)器上無法找到請(qǐng)求的資源。除此之外,也可以在服務(wù)器端拒絕請(qǐng)求且不想說明理由時(shí)使用。

500 表示服務(wù)器端在執(zhí)行請(qǐng)求時(shí)發(fā)生了錯(cuò)誤。也有可能是Web應(yīng)用存在的bug或某些臨時(shí)的故障。

503 表示服務(wù)器暫時(shí)處于超負(fù)載或正在進(jìn)行停機(jī)維護(hù),現(xiàn)在無法處理請(qǐng)求。

③GET和POST請(qǐng)求數(shù)據(jù)區(qū)別

使用Get請(qǐng)求時(shí),參數(shù)在URL中顯示,而使用Post方式,則放在send里面

使用Get請(qǐng)求發(fā)送數(shù)據(jù)量小,Post請(qǐng)求發(fā)送數(shù)據(jù)量大

使用Get請(qǐng)求安全性低,會(huì)被緩存,而Post請(qǐng)求反之

關(guān)于第一點(diǎn)區(qū)別,詳情見下面兩張圖:

四、結(jié)束語

其實(shí)通過 XMLHttpRequest或者封裝后的框架進(jìn)行網(wǎng)絡(luò)請(qǐng)求,這種方式已經(jīng)有點(diǎn)老舊了,配置和調(diào)用方式非?;靵y,近幾年剛剛出來的Fetch提供了一個(gè)更好的替代方法,它不僅提供了一種簡(jiǎn)單,合乎邏輯的方式來跨網(wǎng)絡(luò)異步獲取資源,而且可以很容易地被其他技術(shù)使用。

想了解如何利用Fetch請(qǐng)求數(shù)據(jù),請(qǐng)猛戳
fetch 如何請(qǐng)求常見數(shù)據(jù)格式

想了解Ajax如何請(qǐng)求后臺(tái)數(shù)據(jù),請(qǐng)猛戳
Ajax請(qǐng)求后臺(tái)數(shù)據(jù)

參考文章 javascript教程 Ajax 簡(jiǎn)介 再也不學(xué)AJAX了?。ㄒ唬〢JAX概述 HTTP菜鳥教程 AJAX的POST和GET請(qǐng)求的區(qū)別

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

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

相關(guān)文章

  • Ajax原理一篇夠了

    摘要:請(qǐng)求數(shù)據(jù)流程與領(lǐng)導(dǎo)想找小李匯報(bào)一下工作類似。表示從客戶端發(fā)來的請(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īng)用的網(wǎng)頁開發(fā)技術(shù)。AJAX 是一種用于創(chuàng)建快速動(dòng)態(tài)網(wǎng)頁的技術(shù)。它可以令開發(fā)...

    z2xy 評(píng)論0 收藏0
  • Ajax原理一篇夠了

    摘要:請(qǐng)求數(shù)據(jù)流程與領(lǐng)導(dǎo)想找小李匯報(bào)一下工作類似。表示從客戶端發(fā)來的請(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īng)用的網(wǎng)頁開發(fā)技術(shù)。AJAX 是一種用于創(chuàng)建快速動(dòng)態(tài)網(wǎng)頁的技術(shù)。它可以令開發(fā)...

    KevinYan 評(píng)論0 收藏0
  • Java3y文章目錄導(dǎo)航

    摘要:前言由于寫的文章已經(jīng)是有點(diǎn)多了,為了自己和大家的檢索方便,于是我就做了這么一個(gè)博客導(dǎo)航。 前言 由于寫的文章已經(jīng)是有點(diǎn)多了,為了自己和大家的檢索方便,于是我就做了這么一個(gè)博客導(dǎo)航。 由于更新比較頻繁,因此隔一段時(shí)間才會(huì)更新目錄導(dǎo)航哦~想要獲取最新原創(chuàng)的技術(shù)文章歡迎關(guān)注我的公眾號(hào):Java3y Java3y文章目錄導(dǎo)航 Java基礎(chǔ) 泛型就這么簡(jiǎn)單 注解就這么簡(jiǎn)單 Druid數(shù)據(jù)庫連接池...

    KevinYan 評(píng)論0 收藏0
  • AJAX入門這一篇夠了

    摘要:性能會(huì)有所降低一點(diǎn)內(nèi)容,刷新整個(gè)頁面用戶的操作頁面會(huì)中斷整個(gè)頁面被刷新了就是能夠做到局部刷新三對(duì)象是中最重要的一個(gè)對(duì)象。頭信息已經(jīng)接收,響應(yīng)數(shù)據(jù)尚未接收。 一、什么是Ajax Ajax(Asynchronous JavaScript and XML) 異步JavaScript和XML Ajax實(shí)際上是下面這幾種技術(shù)的融合: (1)XHTML和CSS的基于標(biāo)準(zhǔn)的表示技術(shù) (2)DOM進(jìn)...

    tunny 評(píng)論0 收藏0

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

0條評(píng)論

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