ajax學習

現(xiàn)在前端的請求方法非常多,可以是最開始的XmlHttpRequest,也可以是使用最多的ajax,也可以是Promise和一眾在Promise之上進行封裝的請求方法。

現(xiàn)在我想重新看一下ajax。

get和post

大家知道http有很多方法,方法如下

方法 描述
GET 從指定的資源請求數(shù)據(jù)。
POST 向指定的資源提交要被處理的數(shù)據(jù)。
HEAD 與 GET 相同,但只返回 HTTP 報頭,不返回文檔主體。
PUT 上傳指定的 URI 表示。
DELETE 刪除指定資源。
OPTIONS 返回服務器支持的 HTTP 方法。
CONNECT 把請求連接轉(zhuǎn)換到透明的 TCP/IP 通道。

比較常用的是get、post、put和delete。

今天這邊主要比較的是大家經(jīng)常比較的get和post。

GET 方法

請注意,查詢字符串(名稱/值對)是在 GET 請求的 URL 中發(fā)送的:

/test/demo_form.asp?name1=value1&name2=value2

有關 GET 請求的其他一些特點:
GET 請求可被緩存
GET 請求保留在瀏覽器歷史記錄中
GET 請求可被收藏為書簽
GET 請求不應在處理敏感數(shù)據(jù)時使用(在url中拼接參數(shù),明文可見。)
GET 請求有長度限制 (這邊的長度限制不是http對get的限制,而是瀏覽器對url地址有長度限制)
GET 請求只應當用于取回數(shù)據(jù)

POST 方法

請注意,查詢字符串(名稱/值對)是在 POST 請求的 HTTP 消息主體中發(fā)送的:

POST /test/demo_form.asp HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2 

有關 POST 請求的其他一些注釋:
POST 請求不會被緩存
POST 請求不會保留在瀏覽器歷史記錄中
POST 不能被收藏為書簽
POST 請求對數(shù)據(jù)長度沒有要求

ajax實現(xiàn)

ajax的核心機制是XMLHttpRequest。文檔可以看這個 MDN XMLHttpRequest 文檔。

我挑了幾個比較重要的屬性和方法記一下:

readyState方法:

請求的五種狀態(tài)

狀態(tài) 描述
0 UNSENT (未打開) open()方法還未被調(diào)用.
1 OPENED (未發(fā)送) open()方法已經(jīng)被調(diào)用.
2 HEADERS_RECEIVED (已獲取響應頭) send()方法已經(jīng)被調(diào)用, 響應頭和響應狀態(tài)已經(jīng)返回.
3 LOADING (正在下載響應體) 響應體下載中; responseText中已經(jīng)獲取了部分數(shù)據(jù).
4 DONE (請求完成) 整個請求過程已經(jīng)完畢.
var Ajax={
    get: function(url, fn) {
        var obj = new XMLHttpRequest();
        // XMLHttpRequest對象用于在后臺與服務器交換數(shù)據(jù)          
        obj.open('GET', url, true);
        obj.onreadystatechange = function() {
            if (obj.readyState == 4 && obj.status == 200 || obj.status == 304) {
                // readyState == 4說明請求已完成
                fn.call(this, obj.responseText);  //從服務器獲得數(shù)據(jù)
            }
        };
        obj.send();
    },
    post: function (url, data, fn) {         
        // data應為'a=a1&b=b1'這種字符串格式,在jq里如果data為對象會自動將對象轉(zhuǎn)成這種字符串格式
        var obj = new XMLHttpRequest();
        obj.open("POST", url, true);
        obj.setRequestHeader("Content-type", "application/x-www-form-urlencoded");  
        // 添加http頭,發(fā)送信息至服務器時內(nèi)容編碼類型
        obj.onreadystatechange = function() {
            if (obj.readyState == 4 && (obj.status == 200 || obj.status == 304)) {  
                // 304未修改
                fn.call(this, obj.responseText);
            }
        };
        obj.send(data);
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 1、AJAX 簡介 AJAX(音譯為:阿賈克斯) = Asynchronous JavaScript and XM...
    九把魚閱讀 488評論 0 2
  • Ajax 什么是ajax AJAX即“Asynchronous JavaScript and XML”(異步的Ja...
    恰皮閱讀 4,227評論 5 48
  • 慕課網(wǎng)Ajax全接觸 Ajax全稱: Asynchronous JavaScript and XML(異步的Jav...
    垃圾簡書_吃棗藥丸閱讀 828評論 0 8
  • 一、Ajax技術(shù)概念 Ajax 是一種在無需重新加載整個網(wǎng)頁的情況下,能夠更新部分網(wǎng)頁的技術(shù)。Ajax的全稱是As...
    遠遠暖暖閱讀 398評論 0 0
  • 什么是ajax 是一種使用js異步獲取響應數(shù)據(jù),進行頁面的局部刷新技術(shù)方案 與傳統(tǒng)的web應用比較 傳統(tǒng)的web應...
    放風箏的小小馬閱讀 359評論 0 0

友情鏈接更多精彩內(nèi)容