官方文檔
超好用的API接口平臺(tái)分享膝迎,含免費(fèi)API
JSON API免費(fèi)接口
XMLHttpRequest 對(duì)象用于在后臺(tái)與服務(wù)器交換數(shù)據(jù)。
XMLHttpRequest 對(duì)象是開發(fā)者的夢(mèng)想使鹅,因?yàn)槟軌颍?/p>
- 在不重新加載頁(yè)面的情況下更新網(wǎng)頁(yè)
- 在頁(yè)面已加載后從服務(wù)器請(qǐng)求數(shù)據(jù)
- 在頁(yè)面已加載后從服務(wù)器接收數(shù)據(jù)
- 在后臺(tái)向服務(wù)器發(fā)送數(shù)據(jù)
1. 創(chuàng)建 XMLHttpRequest 對(duì)象
var xhr = new xmlHttpRequest();
老版本的 Internet Explorer (IE5 和 IE6)使用 ActiveX 對(duì)象:
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
IE 5.0 版本開始以 ActiveX 組件形式支持 XMLHttpRequest涌穆,IE 7.0 版本開始標(biāo)準(zhǔn)化 XMLHttpRequest敛苇。不過(guò)所有瀏覽器實(shí)現(xiàn)的 XMLHttpRequest 對(duì)象都提供相同的接口和用法梳码。
可以把定義 XMLHttpRequest 對(duì)象進(jìn)行封裝
下面示例使用工廠模式把定義 XMLHttpRequest 對(duì)象進(jìn)行封裝斜筐,這樣只需要調(diào)用 creatXHR() 方法就可以返回一個(gè) XMLHttpRequest 對(duì)象冰啃。
function createXHR(){
var XHR = [//兼容不同瀏覽器和版本得創(chuàng)建函數(shù)數(shù)組
function() {return new XMLHttpRequest ()},
function(){ return new ActiveXObject("Msxml2.XMLHTTP")},
function(){ return new ActiveXObject("Msxml3.XMLHTTPP")},
function(){ return new ActiveXObject("Microsoft.XMLHTTP")}
];
var xhr = null;
for(let index = 0;index < XHR.length;index++){
try{
xhr = XHR[index]()
}catch(err){
console.error(err)
continue
}
break;
}
return xhr
}
在上面代碼中邓夕,首先定義一個(gè)數(shù)組,收集各種創(chuàng)建 XMLHttpRequest 對(duì)象的函數(shù)阎毅。第 1 個(gè)函數(shù)是標(biāo)準(zhǔn)用法焚刚,其他函數(shù)主要針對(duì) IE 瀏覽器的不同版本嘗試創(chuàng)建 ActiveX 對(duì)象。然后設(shè)置變量 xhr 為 null扇调,表示為空對(duì)象矿咕。接著遍歷工廠內(nèi)所有函數(shù)并嘗試執(zhí)行它們,為了避免發(fā)生異常,把所有調(diào)用函數(shù)放在 try 中執(zhí)行碳柱,如果發(fā)生錯(cuò)誤捡絮,則在 catch 中捕獲異常并執(zhí)行 continue 命令,返回繼續(xù)執(zhí)行莲镣,避免拋出異常福稳。如果創(chuàng)建成功,則中止循環(huán)瑞侮,返回 XMLHttpRequest 對(duì)象的圆。
2. 建立連接
在 JavaScript 中,使用 XMLHttpRequest 對(duì)象的 open() 方法可以建立一個(gè) HTTP 請(qǐng)求半火。用法如下:
xhr.open(method,url,async,username,password)
xhr.open(method, url, async, username, password);
其中 xhr 表示 XMLHttpRequest 對(duì)象越妈,open() 方法包含 5 個(gè)參數(shù),說(shuō)明如下:
method :要使用的 HTTP 方法钮糖,比如 GET梅掠、POST、PUT店归、DELETE瓤檐、等,大小寫不敏感娱节。對(duì)于非 HTTP(S) URL 被忽略挠蛉。
url: 一個(gè)
DOMString
表示要向其發(fā)送請(qǐng)求的 URL。async:一個(gè)可選的布爾參數(shù)肄满,表示是否異步執(zhí)行操作谴古,默認(rèn)為 true。如果值為 false稠歉,send() 方法直到收到答復(fù)前不會(huì)返回,當(dāng)狀態(tài)改變時(shí)會(huì)立即調(diào)用 onreadystatechange 屬性指定的回調(diào)函數(shù)掰担。如果 true,已完成事務(wù)的通知可供事件監(jiān)聽器使用怒炸。如果 multipart 屬性為 true 則這個(gè)必須為 true带饱,否則將引發(fā)異常。
備注:主線程上的同步請(qǐng)求很容易破壞用戶體驗(yàn)阅羹,應(yīng)該避免勺疼;實(shí)際上,許多瀏覽器已完全棄用主線程上的同步 XHR 支持捏鱼。在Worker
中允許同步請(qǐng)求username:可選參數(shù)执庐,如果服務(wù)器需要驗(yàn)證,該參數(shù)指定用戶名导梆,如果未指定轨淌,當(dāng)服務(wù)器需要驗(yàn)證時(shí)迂烁,會(huì)彈出驗(yàn)證窗口。
password:可選參數(shù)递鹉,驗(yàn)證信息中的密碼部分盟步,如果用戶名為空,則該值將被忽略躏结。
3. 建立連接后址芯,可以使用 send() 方法發(fā)送請(qǐng)求。用法如下:
xhr.send(body);//選填
XMLHttpRequest.send() 方法用于發(fā)送 HTTP 請(qǐng)求窜觉。如果是異步請(qǐng)求(默認(rèn)為異步請(qǐng)求)谷炸,則此方法會(huì)在請(qǐng)求發(fā)送后立即返回;如果是同步請(qǐng)求禀挫,則此方法直到響應(yīng)到達(dá)后才會(huì)返回旬陡。XMLHttpRequest.send() 方法接受一個(gè)可選的參數(shù),其作為請(qǐng)求主體语婴;如果請(qǐng)求方法是 GET 或者 HEAD描孟,則應(yīng)將請(qǐng)求主體設(shè)置為 null。
如果沒(méi)有使用 setRequestHeader()
方法設(shè)置 Accept
頭部信息砰左,則會(huì)發(fā)送帶有 "* / *"
的Accept
頭部匿醒。
如果 body 沒(méi)有指定值,則默認(rèn)值為 null缠导。
發(fā)送請(qǐng)求后廉羔,可以使用 XMLHttpRequest 對(duì)象的 responseBody、responseStream僻造、responseText 或 responseXML 屬等待接收響應(yīng)數(shù)據(jù)
在 XHR 請(qǐng)求中要發(fā)送的數(shù)據(jù)體憋他。可以是:
- 可以為
Document
, 在這種情況下髓削,它在發(fā)送之前被序列化竹挡。
以下是一些可能的解決方案:
解決方案1:使用XMLSerializer
var serializer = new XMLSerializer();
var xml = serializer.serializeToString(document);
var xhr = new XMLHttpRequest();
xhr.open("POST", "some/url", true);
xhr.send(xml);
解決方案2:使用document.documentElement.outerHTML
var xhr = new XMLHttpRequest();
xhr.open("POST", "some/url", true);
xhr.send(document.documentElement.outerHTML);
解決方案3:使用document.documentElement.innerHTML
var xhr = new XMLHttpRequest();
xhr.open("POST", "some/url", true);
xhr.send(document.documentElement.innerHTML);
- 為
XMLHttpRequestBodyInit
, 從 per the Fetch spec (規(guī)范中)可以是Blob
,BufferSource
,FormData
,URLSearchParams
, 或者USVString
對(duì)象。 - null
如果發(fā)送的數(shù)據(jù)是 Document 對(duì)象立膛,需要在發(fā)送之前將其序列化揪罕。當(dāng)發(fā)送一個(gè) Document 對(duì)象時(shí),F(xiàn)irefox 3 之前的版本都是使用 UTF-8 編碼發(fā)送請(qǐng)求的宝泵;FireFox 3 則使用由 body.xmlEncoding
指定的編碼格式正確的發(fā)送文檔好啰,但如果未指定編碼格式,則使用 UTF-8 編碼格式發(fā)送鲁猩。
如果是一個(gè) nsIInputStream 接口坎怪,它必須與 nsIUploadChannel 的 setUploadStream()
方法兼容。在這種情況下廓握,將 Content-Length 的頭部添加到請(qǐng)求中搅窿,它的值則使用 nsIInputStream 接口的 available()
方法獲取。任何報(bào)頭包括在數(shù)據(jù)流頂部的都會(huì)被當(dāng)做報(bào)文主體隙券。所以男应,應(yīng)該在發(fā)送請(qǐng)求即調(diào)用 send()
方法之前使用setRequestHeader()
方法設(shè)置 Content-Type 頭部來(lái)指定數(shù)據(jù)流的 MIME 類型。
發(fā)送二進(jìn)制內(nèi)容的最佳方法(如上傳文件)是使用一個(gè)與 send()
方法結(jié)合的 ArrayBufferView 或者 Blobs
XMLHttpRequest
- 實(shí)例方法
- abort
可冒泡:No;可取消:No;事件處理程序?qū)傩?onabort
當(dāng)一個(gè)請(qǐng)求終止時(shí)abort
事件被觸發(fā)娱仔,比如程序執(zhí)行XMLHttpRequest.abort()
沐飘。
let xhr = new XMLHttpRequest();
let url = 'https://api.uomg.com/api/rand.qinghua';
xhr.onabort = function (params) {
console.log('請(qǐng)求被abort()取消了');
})
xhr.open('POST', url, true);
xhr.send('format=json');
setTimeout(() => {
xhr.abort()
}, 10)
- error
可冒泡:No;可取消:No;事件處理程序?qū)傩?onerror
當(dāng)請(qǐng)求遇到錯(cuò)誤時(shí),將觸發(fā)error 事件牲迫。
let xhr = new XMLHttpRequest();
let url = 'https://somewhere.org/i-dont-exist';
xhr.onerror = function (params) {
console.log('請(qǐng)求遇到錯(cuò)誤了');
}
xhr.open('GET', url);
xhr.send()
- load
可冒泡:No;可取消:No;事件處理程序?qū)傩?onload
當(dāng)一個(gè)XMLHttpRequest
請(qǐng)求完成的時(shí)候會(huì)觸發(fā)load
事件耐朴。
let xhr = new XMLHttpRequest();
let url = 'https://api.uomg.com/api/rand.qinghua';
xhr.onload= function (params) {
console.log('請(qǐng)求完成了');
}
xhr.open('GET', url);
xhr.send()
- loadstart
當(dāng)程序開始加載時(shí),loadstart 事件將被觸發(fā)盹憎。這個(gè)事件可以被XMLHttpRequest
調(diào)用筛峭,也適用于<img>
和<video>
元素。
let xhr = new XMLHttpRequest();
let url = 'https://api.uomg.com/api/rand.qinghua';
xhr.onloadstart = function (params) {
console.log('request loadstart');
}
xhr.onload= function (params) {
console.log('request onload');
}
xhr.open('GET', url);
xhr.send()
- loadend
loadend 事件總是在一個(gè)資源的加載進(jìn)度停止之后被觸發(fā) (例如陪每,在已經(jīng)觸發(fā)“error”影晓,“abort”或“l(fā)oad”事件之后)。這適用于XMLHttpRequest
調(diào)用檩禾,以及<img>
或<video>
之類元素的內(nèi)容挂签。
let xhr = new XMLHttpRequest();
let url = 'https://api.uomg.com/api/rand.qinghua';
xhr.onloadend = function (params) {
console.log('request loadend ');//再執(zhí)行l(wèi)oadend
}
xhr.onload= function (params) {
console.log('request onload');//先執(zhí)行onload
}
xhr.open('GET', url);
xhr.send()
- progress
可冒泡:No;可取消:No;事件處理程序?qū)傩?onprogress
progress 事件會(huì)在請(qǐng)求接收到數(shù)據(jù)的時(shí)候被周期性觸發(fā)。
XMLHttpRequest對(duì)象在進(jìn)行文件上傳或下載時(shí)盼产,可以利用其progress事件來(lái)跟蹤文件的上傳或下載進(jìn)度饵婆。
var xhr = new XMLHttpRequest();
var file = document.querySelector('input[type="file"]').files[0];
var formData = new FormData();
formData.append('file', file);
xhr.open('POST', '/upload', true);
xhr.upload.onprogress = function(e) {
if (e.lengthComputable) {
var percentComplete = (e.loaded / e.total) * 100;
console.log(percentComplete.toFixed(2) + '%');
}
};
xhr.send(formData);
- onreadystatechange
只要readyState
屬性發(fā)生變化,就會(huì)調(diào)用相應(yīng)的處理函數(shù)戏售。這個(gè)回調(diào)函數(shù)會(huì)被用戶線程所調(diào)用啦辐。XMLHttpRequest.onreadystatechange
會(huì)在XMLHttpRequest
的readyState
屬性發(fā)生改變時(shí)觸發(fā)readystatechange
事件的時(shí)候被調(diào)用。
警告:這個(gè)方法不該用于同步的 requests 對(duì)象蜈项,并且不能在內(nèi)部 (C++) 代碼中使用芹关。
當(dāng)一個(gè)XMLHttpRequest
請(qǐng)求abort方法取消時(shí),其對(duì)應(yīng)的readystatechange
事件不會(huì)被觸發(fā)紧卒。
var xhr = new XMLHttpRequest(),
method = "GET",
url = "https://developer.mozilla.org/";
xhr.open(method, url, true);
xhr.onreadystatechange = function () {
if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
console.log(xhr.responseText);
}
};
xhr.send();
- timeout
可冒泡:No;可取消:No;事件處理程序?qū)傩?ontimeout
當(dāng)進(jìn)度由于預(yù)定時(shí)間到期而終止時(shí)侥衬,會(huì)觸發(fā) timeout 事件。
let xhr = new XMLHttpRequest();
let url = 'https://api.uomg.com/api/rand.qinghua';
xhr.ontimeout= function (params) {
console.error("Timeout!!");
}
xhr.open('GET', url);
xhr.send()
- 實(shí)例屬性
- status
只讀屬性XMLHttpRequest.status
返回了XMLHttpRequest
響應(yīng)中的數(shù)字狀態(tài)碼跑芳。status
的值是一個(gè)無(wú)符號(hào)短整型
轴总。在請(qǐng)求完成前,status
的值為0
博个。值得注意的是怀樟,如果 XMLHttpRequest 出錯(cuò),瀏覽器返回的 status 也為 0盆佣。status 碼是標(biāo)準(zhǔn)的 HTTP status codes往堡。舉個(gè)例子械荷,status
200
代表一個(gè)成功的請(qǐng)求。如果服務(wù)器響應(yīng)中沒(méi)有明確指定 status 碼虑灰,XMLHttpRequest.status
將會(huì)默認(rèn)為200
吨瞎。
HTTP 響應(yīng)狀態(tài)碼用來(lái)表明特定HTTP
請(qǐng)求是否成功完成。 響應(yīng)被歸為以下五大類:
-
信息響應(yīng) (
100
–199
) -
成功響應(yīng) (
200
–299
) -
重定向消息 (
300
–399
) -
客戶端錯(cuò)誤響應(yīng) (
400
–499
) -
服務(wù)端錯(cuò)誤響應(yīng) (
500
–599
)
- statusText
只讀屬性XMLHttpRequest.statusText
返回了XMLHttpRequest
請(qǐng)求中由服務(wù)器返回的一個(gè)DOMString
類型的文本信息穆咐,這則信息中也包含了響應(yīng)的數(shù)字狀態(tài)碼颤诀。不同于使用一個(gè)數(shù)字來(lái)指示的狀態(tài)碼XMLHTTPRequest.status
,這個(gè)屬性包含了返回狀態(tài)對(duì)應(yīng)的文本信息对湃,例如"OK"或是"Not Found"崖叫。如果請(qǐng)求的狀態(tài)readyState
的值為"UNSENT"或者"OPENED",則這個(gè)屬性的值將會(huì)是一個(gè)空字符串拍柒。如果服務(wù)器未明確指定一個(gè)狀態(tài)文本信息心傀,則statusText
的值將會(huì)被自動(dòng)賦值為"OK"。 - readyState
XMLHttpRequest.readyState 屬性返回一個(gè) XMLHttpRequest 代理當(dāng)前所處的狀態(tài)斤儿。一個(gè) XHR 代理總是處于下列狀態(tài)中的一個(gè):值 狀態(tài) 描述 0 UNSENT 代理被創(chuàng)建剧包,但尚未調(diào)用 open() 方法。 1 OPENED open() 方法已經(jīng)被調(diào)用往果。 2 HEADERS_RECEIVED send() 方法已經(jīng)被調(diào)用疆液,并且頭部和狀態(tài)已經(jīng)可獲得。 3 LOADING 下載中陕贮;responseText 屬性已經(jīng)包含部分?jǐn)?shù)據(jù)堕油。 4 DONE 下載操作已完成。 - responseType
responseType 是一個(gè)枚舉字符串值肮之,用于指定響應(yīng)中包含的數(shù)據(jù)類型掉缺。
它還允許作者更改響應(yīng)類型。如果將 responseType 的值設(shè)置為空字符串戈擒,則會(huì)使用 text 作為默認(rèn)值眶明。
值
Global_Objects/String
類型的值,指定響應(yīng)包含的數(shù)據(jù)類型筐高。它可以采用以下值:值 描述 '' 空的 responseType 字符串與默認(rèn)類型 "text" 相同搜囱。 arraybuffer response 是一個(gè)包含二進(jìn)制數(shù)據(jù)的 JavaScript ArrayBuffer blob response是一個(gè)包含二進(jìn)制數(shù)據(jù)的 Blob對(duì)象。 document response是一個(gè)HTML Document或XML XMLDocument
柑土,根據(jù)接收到的數(shù)據(jù)的 MIME 類型而定蜀肘。請(qǐng)參閱`XMLHttpRequest 中的 HTML,了解有關(guān)使用 XHR 獲取 HTML 內(nèi)容的更多信息稽屏。json response是通過(guò)將接收到的數(shù)據(jù)內(nèi)容解析為 JSON
而創(chuàng)建的 JavaScript 對(duì)象扮宠。text response是 DOMString
對(duì)象中的文本。ms-stream response是是流式下載的一部分狐榔;此響應(yīng)類型僅允許用于下載請(qǐng)求坛增,并且僅受 Internet Explorer 支持 - response
XMLHttpRequest的response
屬性返回響應(yīng)的正文获雕。返回的類型為ArrayBuffer
、Blob
轿偎、Document
典鸡、JavaScript Object
或字符串中的一個(gè)被廓。這取決于請(qǐng)求的responseType
屬性坏晦。
值
一個(gè)對(duì)象,其類型取決于responseType
的值嫁乘。你可以嘗試設(shè)置responseType
的值昆婿,以便請(qǐng)求特定的類型的數(shù)據(jù)。responseType
要在調(diào)用open()
初始化請(qǐng)求之后以及在調(diào)用send()
發(fā)送請(qǐng)求到服務(wù)器之前設(shè)置蜓斧。
如果請(qǐng)求尚未完成或未成功仓蛆,則取值是null
。例外的挎春,讀取文本數(shù)據(jù)時(shí)如果將responseType
的值設(shè)置成"text"
或空字符串(""
)而請(qǐng)求狀態(tài)還是LOADING
readyState
(3)時(shí)看疙,response
包含到目前為止該請(qǐng)求已經(jīng)取得的內(nèi)容。 - responseText
在一個(gè)請(qǐng)求被發(fā)送后直奋,從服務(wù)器端返回文本芒澜。
值
DOMString
是XMLHttpRequest
返回的純文本的值笆包。當(dāng)DOMString
為null
時(shí),表示請(qǐng)求失敗了。當(dāng)DOMString
為 "" 時(shí)涂邀,表示這個(gè)請(qǐng)求還沒(méi)有被send()
當(dāng)處理一個(gè)異步 request 的時(shí)候,盡管當(dāng)前請(qǐng)求并沒(méi)有結(jié)束烛谊,responseText
的返回值是當(dāng)前從后端收到的內(nèi)容镀层。
當(dāng)請(qǐng)求狀態(tài)readyState
變?yōu)?XMLHttpRequest.DONE
(4
),且status
值為 200("OK")時(shí)船逮,responseText
是全部后端的返回?cái)?shù)據(jù) - responseURL
只讀
屬性 XMLHttpRequest.responseURL 返回響應(yīng)的序列化 URL顾腊,如果 URL 為空則返回空字符串。如果 URL 有錨點(diǎn)挖胃,則位于 URL # 后面的內(nèi)容會(huì)被刪除杂靶。如果 URL 有重定向,responseURL 的值會(huì)是經(jīng)過(guò)多次重定向后的最終 URL冠骄。 - responseXML
是一個(gè)只讀
值伪煤,它返回一個(gè)包含請(qǐng)求檢索的 HTML 或 XML 的Document
,如果請(qǐng)求未成功凛辣,尚未發(fā)送抱既,或者檢索的數(shù)據(jù)無(wú)法正確解析為 XML 或 HTML,則為 null扁誓。默認(rèn)是當(dāng)作“text / xml”來(lái)解析防泵。當(dāng)responseType
設(shè)置為“document”并且請(qǐng)求已異步執(zhí)行時(shí)蚀之,響應(yīng)將被當(dāng)作“text / html”來(lái)解析。responseXML
對(duì)于任何其他類型的數(shù)據(jù)以及data:
URLs為 null捷泞。
備注: responseXML 在這個(gè)屬性的歷史堪稱神器足删,它可以同時(shí)在 HTML 和 XML 中工作
如果服務(wù)器沒(méi)有明確指出Content-Type
頭是"text/xml"
還是"application/xml"
, 你可以使用XMLHttpRequest.overrideMimeType()
強(qiáng)制XMLHttpRequest
解析為 XML。 - timeout
是一個(gè)無(wú)符號(hào)長(zhǎng)整型數(shù)锁右,代表著一個(gè)請(qǐng)求在被自動(dòng)終止前所消耗的毫秒數(shù)失受。默認(rèn)值為 0,意味著沒(méi)有超時(shí)咏瑟。超時(shí)并不應(yīng)該用在一個(gè)document environment
中的同步 XMLHttpRequests 請(qǐng)求中拂到,否則將會(huì)拋出一個(gè)InvalidAccessError
類型的錯(cuò)誤。當(dāng)超時(shí)發(fā)生码泞,timeout
事件將會(huì)被觸發(fā)兄旬。 - upload
**XMLHttpRequest.upload **屬性返回一個(gè)XMLHttpRequestUpload
對(duì)象,用來(lái)表示上傳的進(jìn)度余寥。這個(gè)對(duì)象是不透明的领铐,但是作為一個(gè)XMLHttpRequestEventTarget
,可以通過(guò)對(duì)其綁定事件來(lái)追蹤它的進(jìn)度宋舷。
事件 | 相應(yīng)屬性的信息類型 |
---|---|
onloadstart | 獲取開始 |
onprogress | 數(shù)據(jù)傳輸進(jìn)行中 |
onabort | 獲取操作終止 |
onerror | 獲取失敗 |
onload | 獲取成功 |
ontimeout | 獲取操作在用戶規(guī)定的時(shí)間內(nèi)未完成 |
onloadend | 獲取完成(不論成功與否) |
- channel
創(chuàng)建請(qǐng)求的時(shí)候绪撵,XMLHttpRequest.channel 是一個(gè)被對(duì)象使用的nsIChannel
。如果管道(channel)還沒(méi)被創(chuàng)建的話肥缔,它的值是null
莲兢。在一個(gè) multi-part 請(qǐng)求案例中,它是初始化的管道续膳,不是 multi-part 請(qǐng)求中的不同部分改艇。
需要權(quán)限提升。 - mozAnon
XMLHttpRequest.mozAnon 是布爾類型坟岔。如果這個(gè)變量為真谒兄,則這次請(qǐng)求將不攜帶 Cookies 或頭部認(rèn)證信息來(lái)發(fā)送。 - mozBackgroundRequest
備注:(1)Web 內(nèi)容無(wú)法使用此方法社付。它需要提升權(quán)限才能訪問(wèn)承疲。(2)該屬性必須在調(diào)用 open() 之前設(shè)置。
XMLHttpRequest.mozBackgroundRequest 是一個(gè)布爾對(duì)象鸥咖,表示 object 是否為后臺(tái)的服務(wù)請(qǐng)求燕鸽。如果為 true,則不會(huì)將任何加載組與請(qǐng)求關(guān)聯(lián)啼辣,并且不會(huì)向用戶顯示安全對(duì)話框啊研。
請(qǐng)求失敗時(shí)通常會(huì)顯示安全對(duì)話框(例如身份驗(yàn)證或錯(cuò)誤證書通知)。 - mozSystem
mozSystem 是一個(gè)布爾值。如果它被設(shè)置為 true党远,那么在請(qǐng)求時(shí)就不會(huì)強(qiáng)制要求執(zhí)行同源策略(Same Origin Policy)削解。 - withCredentials
XMLHttpRequest.withCredentials
屬性是一個(gè)布爾
值,它指示了是否該使用類似 cookie沟娱、Authorization 標(biāo)頭或者 TLS 客戶端證書等憑據(jù)進(jìn)行跨站點(diǎn)訪問(wèn)控制(Access-Control
)請(qǐng)求氛驮。設(shè)置withCredentials
對(duì)同源請(qǐng)求是無(wú)效的。
備注: 永遠(yuǎn)不會(huì)影響到同源請(qǐng)求济似。
備注: 不同域下的 XmlHttpRequest 響應(yīng)矫废,不論其 Access-Control- 標(biāo)頭設(shè)置什么值,都無(wú)法為它自身站點(diǎn)設(shè)置 Cookie 值碱屁,除非它在請(qǐng)求之前將 withCredentials 設(shè)為 true磷脯。
此外蛾找,這個(gè)標(biāo)志還用于指示何時(shí)在響應(yīng)中忽略 cookie娩脾。默認(rèn)值是false
。除非在發(fā)送XMLHttpRequest
請(qǐng)求之前打毛,將withCredentials
設(shè)置為true
柿赊,否則來(lái)自不同域的XMLHttpRequest
響應(yīng)無(wú)法為自己的域設(shè)置 cookie 值。而通過(guò)設(shè)置withCredentials
為 true 獲得第三方 cookie幻枉,仍將遵循同源策略碰声,因此請(qǐng)求的腳本無(wú)法通過(guò)document.cookie
或者響應(yīng)標(biāo)頭訪問(wèn)。