是什么导狡?
當(dāng)需要從服務(wù)器中獲取數(shù)據(jù)或者提交數(shù)據(jù)约巷,發(fā)送請求給服務(wù)器,可以不必重載整個頁面旱捧,就能對頁面進(jìn)行更新
過程独郎?
客戶端發(fā)起http請求,服務(wù)器接受請求后做出響應(yīng)枚赡,發(fā)送響應(yīng)數(shù)據(jù)給客戶端
//readyState:
//0: 連接尚未初始化氓癌,還沒有調(diào)用open
//1: 請求已經(jīng)準(zhǔn)備好,已經(jīng)open贫橙,可以send
//2: 服務(wù)器接受到請求---作出相應(yīng)請求正在處理中
//3: 服務(wù)器已從請求中獲取到了數(shù)據(jù)贪婉,但是響應(yīng)數(shù)據(jù)還沒有準(zhǔn)備好
//4: 服務(wù)器已經(jīng)請求完畢,發(fā)送響應(yīng)數(shù)據(jù)
get / post 區(qū)別卢肃?
- get方法中send參數(shù)內(nèi)容無效疲迂,但是在firefox中得加上null;在post中在send中加上額外信息
- get在于獲取服務(wù)器數(shù)據(jù)莫湘,post在于客戶端發(fā)送數(shù)據(jù)去更新服務(wù)端
- get方法會將參數(shù)暴露在url中尤蒿,而post不會
- post方式需要指定請求頭的類型(表單:application/x-www-form-urlencoded,如果在form表單指定了enctype屬性,就不需要)幅垮,get不需要指定
function createRequste() {
if (window.XMLHttpRequest) {
return new XMLHttpRequest()
} else {
return new ActiveObject('Microsoft.XMLHTTP')
}
}
var xhr = createRequest();
xhr.open('GET', url, true);
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.state === 200) {
}
}
}
xhr.send();
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=UTF-8'),
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.state === 200) {
}
}
}
xhr.send();
應(yīng)用場景腰池?
- 對數(shù)據(jù)進(jìn)行過濾和操作的場景
- 添加或者刪除列表中的數(shù)據(jù)
- 提交表單內(nèi)容
form 提交
- user agent :先確定操作的成功執(zhí)行 -》 生成一個form data -》 對form data解碼(解碼方式看content-type)-》提交解碼之后的form data給服務(wù)器
關(guān)于form表單提交數(shù)據(jù)時的設(shè)置content-type / enctype
作用: 當(dāng)客戶端提交表單數(shù)據(jù)給服務(wù)器時,需要指定提交的表單數(shù)據(jù)的解碼方式,之后將解碼后的表單數(shù)據(jù)提交給服務(wù)器
編碼方式 | 應(yīng)用 | 編碼規(guī)則 |
---|---|---|
application/x-www-form-urlencoded | 單純的text / ASCII數(shù)據(jù) | 空格符轉(zhuǎn)換成‘+’示弓,特殊字符轉(zhuǎn)換成十六進(jìn)制的ASCII |
multipart/form-data | 二進(jìn)制數(shù)據(jù) | non-ASCII | 不會編碼任何的字符串 |
text/plain | 字符串 | 空格符轉(zhuǎn)換成‘+’ |