--- title: XDomainRequest slug: Web/API/XDomainRequest tags: - AJAX - API - IE - JavaScript - Web - 废弃 - 微软 - 非标准 translation_of: Web/API/XDomainRequest ---

{{obsolete_header}}

{{non-standard_header}}

摘要

XDomainRequest是在IE8和IE9上的HTTP access control (CORS) 的实现,在IE10中被 包含CORS的XMLHttpRequest 取代了,如果你的开发目标是IE10或IE的后续版本,或想要支待其他的浏览器,你需要使用标准的HTTP access control

该接口可以发送GET和POST请求

语法

var xdr = new XDomainRequest();

返回XDomainRequest的实例,该实例可以被用来生成或管理请求。

属性

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

方法

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

事件处理程序

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

例子

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);
}
 

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

安全

XDomainRequest为了确保安全构建,采用了多种方法。

标准

该接口及其方法没有遵循标准。

浏览器兼容性

{{ CompatibilityTable() }}

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
XDomainRequest {{ CompatNo() }} {{ CompatNo() }} 8.0-9.x {{ CompatNo() }} {{ CompatNo() }}
Feature Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
XDomainRequest {{ CompatNo() }} {{ CompatNo() }} {{ CompatUnknown() }} {{ CompatNo() }} {{ CompatNo() }}