21.4 跨源資源共享 583
1
15
16
4
5
13
6
20
21
9
10
11
12
var xdr = new XDomainRequest();
xdr.onload = function(){
alert(xdr.responseText);
};
xdr.open(\"get\", \"http://www.somewhere-else.com/page/\");
xdr.send(null);
XDomainRequestExample01.htm
在接收到響應(yīng)后,你只能訪問響應(yīng)的原始文本;沒有辦法確定響應(yīng)的狀態(tài)代碼。而且,只要響應(yīng)有
效就會(huì)觸發(fā) load 事件,如果失?。ò憫?yīng)中缺少 Access-Control-Allow-Origin 頭部)就會(huì)觸
發(fā) error 事件。遺憾的是,除了錯(cuò)誤本身之外,沒有其他信息可用,因此唯一能夠確定的就只有請(qǐng)求
未成功了。要檢測(cè)錯(cuò)誤,可以像下面這樣指定一個(gè) onerror 事件處理程序。
var xdr = new XDomainRequest();
xdr.onload = function(){
alert(xdr.responseText);
};
xdr.onerror = function(){
alert(\"An error occurred.\");
};
xdr.open(\"get\", \"http://www.somewhere-else.com/page/\");
xdr.send(null);
XDomainRequestExample01.htm
鑒于導(dǎo)致 XDR 請(qǐng)求失敗的因素很多,因此建議你不要忘記通過 onerror 事件處
理程序來捕獲該事件;否則,即使請(qǐng)求失敗也不會(huì)有任何提示。
在請(qǐng)求返回前調(diào)用 abort()方法可以終止請(qǐng)求:
xdr.abort(); //終止請(qǐng)求
與 XHR 一樣,XDR 對(duì)象也支持 timeout 屬性以及 ontimeout 事件處理程序。下面是一個(gè)例子。
var xdr = new XDomainRequest();
xdr.onload = function(){
alert(xdr.responseText);
};
xdr.onerror = function(){
alert(\"An error occurred.\");
};
xdr.timeout = 1000;
xdr.ontimeout = function(){
alert(\"Request took too long.\");
};
xdr.open(\"get\", \"http://www.somewhere-else.com/page/\");
xdr.send(null);
這個(gè)例子會(huì)在運(yùn)行 1 秒鐘后超時(shí),并隨即調(diào)用 ontimeout 事件處理程序。
為支持 POST 請(qǐng)求,XDR 對(duì)象提供了 contentType 屬性,用來表示發(fā)送數(shù)據(jù)的格式,如下面的例
子所示。
圖靈社區(qū)會(huì)員 StinkBC(StinkBC@gmail.com) 專享 尊重版權(quán)