aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/web/api/xdomainrequest/index.html
blob: dd7dce289991508cb1f2c9d11cb31c0dfbd2ae76 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
---
title: XDomainRequest
slug: Web/API/XDomainRequest
tags:
  - AJAX
  - API
  - IE
  - JavaScript
  - Web
  - 废弃
  - 微软
  - 非标准
translation_of: Web/API/XDomainRequest
---
<p>{{obsolete_header}}</p>

<p>{{non-standard_header}}</p>

<h2 id="摘要">摘要</h2>

<p><span style="font-size: 14.4444446563721px; line-height: 23.3333339691162px;">XDomainRequest是在IE8和IE9上的</span><a href="/en-US/docs/HTTP/Access_control_CORS" style="font-size: 14.4444446563721px; line-height: 23.3333339691162px;">HTTP access control (CORS) </a>的实现,在IE10中被<span style="font-size: 14.4444446563721px; line-height: 23.3333339691162px;"> 包含CORS的</span><a href="/en-US/docs/Web/API/XMLHttpRequest" style="font-size: 14.4444446563721px; line-height: 23.3333339691162px;">XMLHttpRequest </a>取代了,如果你的开发目标是IE10或IE的后续版本,或想要支待其他的浏览器,你需要使用标准的<a href="/en-US/docs/Web/HTTP/Access_control_CORS" style="font-size: 14.4444446563721px; line-height: 23.3333339691162px;">HTTP access control</a></p>

<p>该接口可以发送GET和POST请求</p>

<h2 id="语法">语法</h2>

<pre>var xdr = new XDomainRequest();</pre>

<p>返回<span style="font-family: Consolas,Monaco,'Andale Mono',monospace; font-size: 14.4444446563721px; line-height: 23.3333339691162px;">XDomainRequest的实例,该实例可以被用来生成或管理请求。</span></p>

<h2 id="属性">属性</h2>

<dl>
 <dt>{{domxref("XDomainRequest.timeout")}}</dt>
 <dd>获取或设置请求的过期时间。</dd>
 <dt>{{domxref("XDomainRequest.responseText")}}</dt>
 <dd>以字符串形式获取响应体。</dd>
</dl>

<h2 id="方法">方法</h2>

<dl>
 <dt>{{domxref("XDomainRequest.open()")}}</dt>
 <dd>根据指定的方法(GET或POST)和URL,打开请求。</dd>
 <dt>{{domxref("XDomainRequest.send()")}}</dt>
 <dd>发送请求。POST的数据会在该方法中被指定。</dd>
 <dt>{{domxref("XDomainRequest.abort()")}}</dt>
 <dd>中止请求。</dd>
</dl>

<h2 id="事件处理程序">事件处理程序</h2>

<dl>
 <dt>{{domxref("XDomainRequest.onprogress")}}</dt>
 <dd>当请求中发送方法和onload事件中有进展时的处理程序。</dd>
 <dt>{{domxref("XDomainRequest.ontimeout")}}</dt>
 <dd>当请求超时时的事件处理程序。</dd>
 <dt>{{domxref("XDomainRequest.onerror")}}</dt>
 <dd>当请求发生错误时的处理程序。</dd>
 <dt>{{domxref("XDomainRequest.onload")}}</dt>
 <dd>当服务器端的响应被完整接收时的处理程序。</dd>
</dl>

<h2 id="例子">例子</h2>

<pre class="brush: js">if(window.XDomainRequest){
  var xdr = new XDomainRequest();

  xdr.open("get", "http://example.com/api/method");

  xdr.onprogress = function () {
    //Progress
  };

  xdr.ontimeout = function () {
    //Timeout
  };

  xdr.onerror = function () {
    //Error Occured
  };

  xdr.onload = function() {
    //success(xdr.responseText);
  }

  setTimeout(function () {
    xdr.send();
  }, 0);
}</pre>

<div> </div>

<div class="note">
<p><strong>注意: </strong>如果多个XDomainRequests同时被发送,一些请求可能会丢失,为避免这种情况,xdr.send()的调用应被包裹在setTimeout方法中(见{{domxref("window.setTimeout()")}})。</p>
</div>

<h2 id="安全">安全</h2>

<p><span style="font-size: 14.4444446563721px; line-height: 23.3333339691162px;">XDomainRequest为了确保安全构建,采用了多种方法。</span></p>

<ul>
 <li>安全协议源必须匹配请求的URL。(http到http,https到https)。如果不匹配,请求会报“拒绝访问”的错误。</li>
 <li>被请求的URL的服务器必须带有<span style="font-size: 14.4444446563721px; line-height: 23.3333339691162px;"> 设置为(“*”)或包含了请求方的</span><code style="font-size: 14.4444446563721px; line-height: 23.3333339691162px;"><a href="/en-US/docs/Web/HTTP/Access_control_CORS#Access-Control-Allow-Origin" style="font-size: 14.4444446563721px; line-height: 23.3333339691162px;">Access-Control-Allow-Origin</a>的头部。</code></li>
</ul>

<h2 id="标准">标准</h2>

<p>该接口及其方法没有遵循标准。</p>

<h2 id="浏览器兼容性">浏览器兼容性</h2>

<p>{{ CompatibilityTable() }}</p>

<div id="compat-desktop">
<table class="compat-table">
 <tbody>
  <tr>
   <th>Feature</th>
   <th>Chrome</th>
   <th>Firefox (Gecko)</th>
   <th>Internet Explorer</th>
   <th>Opera</th>
   <th>Safari</th>
  </tr>
  <tr>
   <td>XDomainRequest</td>
   <td>{{ CompatNo() }}</td>
   <td>{{ CompatNo() }}</td>
   <td>8.0-9.x</td>
   <td>{{ CompatNo() }}</td>
   <td>{{ CompatNo() }}</td>
  </tr>
 </tbody>
</table>
</div>

<div id="compat-mobile">
<table class="compat-table">
 <tbody>
  <tr>
   <th>Feature</th>
   <th>Android</th>
   <th>Firefox Mobile (Gecko)</th>
   <th>IE Mobile</th>
   <th>Opera Mobile</th>
   <th>Safari Mobile</th>
  </tr>
  <tr>
   <td>XDomainRequest</td>
   <td>{{ CompatNo() }}</td>
   <td>{{ CompatNo() }}</td>
   <td>{{ CompatUnknown() }}</td>
   <td>{{ CompatNo() }}</td>
   <td>{{ CompatNo() }}</td>
  </tr>
 </tbody>
</table>
</div>

<section id="Quick_Links">
<ol>
 <li data-default-state="open"><a href="#"><strong>Properties</strong></a>

  <ol>
   <li>{{domxref("XDomainRequest.timeout")}}</li>
   <li>{{domxref("XDomainRequest.responseText")}}</li>
  </ol>
 </li>
 <li data-default-state="open"><a href="#"><strong>Methods</strong></a>
  <ol>
   <li>{{domxref("XDomainRequest.open()")}}</li>
   <li>{{domxref("XDomainRequest.send()")}}</li>
   <li>{{domxref("XDomainRequest.abort()")}}</li>
  </ol>
 </li>
 <li data-default-state="open"><a href="#"><strong>Event handlers</strong></a>
  <ol>
   <li>{{domxref("XDomainRequest.onprogress")}}</li>
   <li>{{domxref("XDomainRequest.ontimeout")}}</li>
   <li>{{domxref("XDomainRequest.onerror")}}</li>
   <li>{{domxref("XDomainRequest.onload")}}</li>
  </ol>
 </li>
</ol>
</section>