Ajax 入門之 GET 與 POST 的不同處詳解
在之前的隨筆中,本著懷舊的態(tài)度總結(jié)了一篇 兼容不同瀏覽器 建立XHR對(duì)象的方法:
在建立好XHR對(duì)象之后,客戶端需要做的就是,將數(shù)據(jù)以某種方式傳遞到服務(wù)器,以獲得相應(yīng)的響應(yīng),在這里, Ajax技術(shù)總結(jié)的第二季,我將重點(diǎn)闡述 提交數(shù)據(jù)的兩種方式。
在這之前需要了解一下我們的HTTP傳輸協(xié)議:
HTTP 的工作方式是客戶機(jī)與服務(wù)器之間的請(qǐng)求-應(yīng)答協(xié)議。
舉例:客戶端(瀏覽器)向服務(wù)器提交 HTTP 請(qǐng)求;服務(wù)器向客戶端返回響應(yīng)。響應(yīng)包含關(guān)于請(qǐng)求的狀態(tài)信息以及可能被請(qǐng)求的內(nèi)容。而想要基于HTTP協(xié)議進(jìn)行數(shù)據(jù)傳輸,必然要用到兩種請(qǐng)求方式.
兩種 HTTP 請(qǐng)求方法:GET 和 POST
在客戶機(jī)和服務(wù)器之間進(jìn)行請(qǐng)求-響應(yīng)時(shí),兩種最常被用到的方法是:GET 和 POST。
- GET - 從指定的資源請(qǐng)求數(shù)據(jù)。
- POST - 向指定的資源提交要被處理的數(shù)據(jù)
這是W3C上對(duì)GRT與POST的使用場景描述,從字面上來理解,就是: GET是用來從服務(wù)器獲取數(shù)據(jù)的,POST是用來向服務(wù)器傳送數(shù)據(jù)的
這一點(diǎn),我們從提交路徑與數(shù)據(jù)的URL中就可以看出來:
可以用來指向URL的屬性有:
1. 表單中的 action;
2. a 標(biāo)簽中的 href
3. img script 中的 src 屬性(此屬性不受“ 同源策略 ”限制,可以利用來進(jìn)行“跨域”,我想近期總結(jié)一片關(guān)于跨域的問題,在這里先挖個(gè)坑)
這里,我們講一講form表單提交中他們的不同
一 、Ajax的表單提交中,get 使用 open()函數(shù)來提交數(shù)據(jù),其中,數(shù)據(jù)以 URL? key & value 的形式拼接在URL后面:
xhr.open('get','xxx.php?name=tom & age=18');
xhr.send(null);
在瀏覽器的URL中是這樣的:

get 提交 URL
這里可以看出:GET是把參數(shù)數(shù)據(jù)隊(duì)列加到提交表單的action屬性所指的URL中,值和表單內(nèi)各個(gè)字段一一對(duì)應(yīng),在URL中可以看到。ID的url長度是有限制的,當(dāng)url過長時(shí)會(huì)自動(dòng)截取超長字符。這樣就容易引發(fā)一個(gè)問題:當(dāng)傳遞的參數(shù)過多,導(dǎo)致url過長時(shí),url自動(dòng)截取超長字符,最終傳遞參數(shù)部分獲取不到。這也限制了GET傳送的數(shù)據(jù)大小一般不能超過2KB;
而且,從URL截圖中可以看出: GET安全性非常低,當(dāng)通過GET方法提交數(shù)據(jù)時(shí),用戶名和密碼將出現(xiàn)在URL上。如果:
- 登陸頁面可以被瀏覽器緩存;
- 其他人可以訪問客戶的這臺(tái)機(jī)器。
那么,別人即可以從瀏覽器的歷史記錄中,讀取到此客戶的賬號(hào)和密碼。所以,在某些情況下,GET方法會(huì)帶來嚴(yán)重的安全性問題。
并不是說GET方法沒有優(yōu)點(diǎn),在速度測試中,get提交的速度是POST方式的數(shù)十倍。
二 、Ajax的表單提交中,POST 在 open()函數(shù)中只需要提供URL,由send()函數(shù)提交數(shù)據(jù):
//獲取form數(shù)據(jù)
var formDom = document.querySelector('form');
var formData = new FormData(formDom);
//發(fā)送數(shù)據(jù)
xhr.open('post',formDom.action);
xhr.send(formData);
POST是:通過HTTPPOST機(jī)制,將表單內(nèi)各個(gè)字段與其內(nèi)容放置在HTML HEADER內(nèi)一起傳送到action屬性所指的URL地址。用戶看不到這個(gè)過程。安全性較高
POST傳送的數(shù)據(jù)量較大,一般被默認(rèn)為不受限制。可以用這段demo中FormData對(duì)象的方式傳遞圖片,富文本等文件,這是get所做不到的。
總結(jié)一下,Get是向服務(wù)器發(fā)索取數(shù)據(jù)的一種請(qǐng)求,而Post是向服務(wù)器提交數(shù)據(jù)的一種請(qǐng)求,在FORM(表單)中,Method默認(rèn)為"GET",
實(shí)質(zhì)上,GET和POST只是發(fā)送機(jī)制不同,并不是一個(gè)取一個(gè)發(fā)!
總之,這兩種表單提交方式并沒有優(yōu)劣之分,只有不同的適應(yīng)場景,這需要我們?nèi)粘9ぷ髦腥ジ鶕?jù)需求把握。
后面,我將總結(jié)一下,在瀏覽器與服務(wù)器之間的交互中,路徑的幾種不同書寫方法。
以上所述是小編給大家介紹的Ajax 入門之 GET 與 POST 的不同處詳解,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
不使用XMLHttpRequest對(duì)象實(shí)現(xiàn)Ajax效果的方法小結(jié)
這篇文章主要介紹了不使用XMLHttpRequest對(duì)象實(shí)現(xiàn)Ajax效果的方法,結(jié)合具體實(shí)例形式分析了三種不使用XMLHttpRequest對(duì)象實(shí)現(xiàn)Ajax功能的相關(guān)實(shí)現(xiàn)技巧與操作注意事項(xiàng),需要的朋友可以參考下2019-07-07
jquery1.8版本使用ajax實(shí)現(xiàn)微信調(diào)用出現(xiàn)的問題分析及解決辦法
這篇文章主要介紹了jquery1.8版本使用ajax實(shí)現(xiàn)微信調(diào)用出現(xiàn)的問題分析及解決辦法的相關(guān)資料,需要的朋友可以參考下2015-11-11
使用$.getJSON實(shí)現(xiàn)跨域ajax請(qǐng)求示例代碼
getJSON調(diào)用并獲取遠(yuǎn)程的JSON字符串,將其轉(zhuǎn)換為JSON對(duì)象,如果成功,則執(zhí)行回調(diào)函數(shù),下面有個(gè)不錯(cuò)的示例,需要的朋友可以參考下2013-11-11
django使用ajax post數(shù)據(jù)出現(xiàn)403錯(cuò)誤如何解決
在django中,使用jquery ajax post數(shù)據(jù),會(huì)出現(xiàn)403的錯(cuò)誤,該如何解決呢?下面由腳本之家小編幫大家解決django使用ajax post數(shù)據(jù)出現(xiàn)403錯(cuò)誤,需要的朋友可以參考下2015-09-09
利用ajax+php實(shí)現(xiàn)商品價(jià)格計(jì)算
這篇文章主要為大家詳細(xì)介紹了利用ajax+php實(shí)現(xiàn)商品價(jià)格計(jì)算,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-03-03
Django使用AJAX向服務(wù)器發(fā)起請(qǐng)求的操作方法
AJAX是一種用于創(chuàng)建交互式網(wǎng)頁應(yīng)用程序的技術(shù),它允許在不重新加載整個(gè)頁面的情況下向服務(wù)器發(fā)送和接收數(shù)據(jù),本文給大家介紹Django使用AJAX向服務(wù)器發(fā)起請(qǐng)求的操作方法,感興趣的朋友跟隨小編一起看看吧2024-05-05
原生ajax和iframe框架實(shí)現(xiàn)圖片文件上傳的兩種方式
這篇文章主要為大家詳細(xì)介紹了原生ajax和iframe框架實(shí)現(xiàn)圖片文件上傳的兩種方式,感興趣的小伙伴們可以參考一下2016-04-04
Jquery Ajax請(qǐng)求方法小結(jié)(值得收藏)
本文給大家介紹jquery ajax請(qǐng)求方法小結(jié),jquery作為一個(gè)輕量級(jí)的js框架,能快速的開發(fā)js應(yīng)用,并且在一定程度上改變了我們寫js代碼的習(xí)慣,對(duì)jquery ajax請(qǐng)求感興趣的朋友參考下2015-11-11

