XDomainRequest,IE8+跨域请求对象
XDomainRequest,ie8+浏览器跨域请求的ajax对象。
XDomainRequest成员
XDomainRequest对象有如下成员
事件
XDomainRequest对象有如下事件
事件名称 | 描述 |
---|---|
onerror |
在跨域请求发生错误时触发,事件方法没有参数。示例如下 function err() { alert("XDR onerror"); } //... xdr.onerror = err; |
onload |
跨域请求完毕后触发,事件方法没有参数。示例如下 function loadd() { alert("XDR onload"); alert("Got: " + xdr.responseText); } //... xdr.onload = loadd; |
onprogress |
跨域请求接受数据时触发,事件方法没有参数,此事件在调用send方法和onload事件触发间隔内触发0,1或者无数次。示例如下 function progres() { alert("XDR onprogress"); alert("Got: " + xdr.responseText); } //... xdr.onprogress = progres; |
ontimeout |
跨域请求连接超时时触发,事件方法没有参数。此事件限于onload事件触发。触发了ontimeout事件,XDomainRequest属性responseText不可用,调用此属性会报错。示例如下 function timeo() { alert("XDR ontimeout"); } //... xdr.ontimeout = timeo; |
方法
XDomainRequest对象有如下方法
方法名称 | 描述 |
---|---|
abort |
终止当前http跨域请求。使用方法:object.abort() ,无参数。 在open方法被调用后,onload事件触发前调用,在其他时间段内调用此方法会报错。示例如下 // 1. Create XDR object xdr = new XDomainRequest(); // 2. Open connection with server using POST method xdr.open("POST", "http://www.contoso.com/xdr.txt"); // 3. Send string data to server xdr.send("data to be processed"); // 4. abort xdr.abort(); |
open (XDomainRequest) |
链接服务器,打开跨域请求,语法 HRESULT retVal = object.open(bstrMethod, bstrUrl); 参数说明:
返回值类型:HRESULT,成功执行返回S_OK,否则返回HRESULT错误代码。 |
send (XDomainRequest) |
发送到服务器的字符串数据,语法 HRESULT retVal = object.send(varBody); 示例 // 1. Create XDR object xdr = new XDomainRequest(); // 2. Open connection with server using POST method xdr.open("POST", "http://www.contoso.com/xdr.txt"); // 3. Send string data to server xdr.send("data to be processed"); |
属性
XDomainRequest对象有如下属性
属性名称 | 描述 |
---|---|
constructor |
返回对象构造函数 |
contentType |
获取请求或者想要的内容类型。语法 HRESULT value = object.get_contentType( p); |
responseText |
响应的内容,字符串格式 |
timeout |
获取或者设置跨域请求超时时间,单位毫秒 |
备注
XDomainRequest对象为一个允许脚本连接任何服务器并且交互数据的安全,可信,轻量级数据服务。开发使用 XDomainRequest 对象发送有跨域安全当前ajax请求。
安全警告: 跨域请求(XDRs)匿名保护用户数据,就是说服务器不能确定谁在请求数据。为了保护用户隐私,跨域返回的数据不能为敏感或者个人身份识别之类的信息。为了防止泄露数据给恶意的站点,不鼓励启用XDRs请求。
跨域请求要页面和服务器之间双方同意才行。使用 XDomainRequest (XDR) 创建对象,链接到服务器,文档请求服务器时添加一个Origin 请求头代表请求源,只有当服务器设置了 Access-Control-Allow-Origin 响应头为* 或者为发送请求的url地址。此行为为万维网联盟 (W3C)定义的网站项目允许客户端跨域通信的框架草案。
以asp为例,设置响应头代码如下
<% Response.AddHeader("Access-Control-Allow-Origin","*") %>
跨域请求在下面IE定义的安全区域内允许发送和接受跨域数据
发送请求 \ 被请求的URL | Intranet | Trusted(Intranet) | Trusted(Internet) | Internet | Restricted |
---|---|---|---|---|---|
Intranet | Allow | Allow | Allow | Allow | Deny |
Trusted(Intranet) | Allow | Allow | Allow | Allow | Deny |
Trusted(Internet) | Deny | Deny | Allow | Allow | Deny |
Internet | Deny | Deny | Allow | Allow | Deny |
Restricted | Deny | Deny | Deny | Deny | Deny |
跨域请求仅支持http:// 和https:// 2种协议。
IE下XDomainRequest使用示例如下
// 1. 创建XDR对象 var xdr = new XDomainRequest(); // 2. 打开服务器连接 xdr.open("get", "http://www.contoso.com/xdr.aspx"); // 3. 发送需要的数据 xdr.send();
示例
下面示例发送空的内容到指定的跨域页面。
<!DOCTYPE html> <html> <body> <h2>XDomainRequest</h2> <input type="text" id="tbURL" value="http://www.contoso.com/xdr.txt" style="width: 300px"><br> <input type="text" id="tbTO" value="10000"><br> <input type="button" onclick="mytest()" value="Get"> <input type="button" onclick="stopdata()" value="Stop"> <input type="button" onclick="readdata()" value="Read"> <br> <div id="dResponse"></div> <script> var xdr; function readdata() { var dRes = document.getElementById('dResponse'); dRes.innerText = xdr.responseText; alert("Content-type: " + xdr.contentType); alert("Length: " + xdr.responseText.length); } function err() { alert("XDR onerror"); } function timeo() { alert("XDR ontimeout"); } function loadd() { alert("XDR onload"); alert("Got: " + xdr.responseText); } function progres() { alert("XDR onprogress"); alert("Got: " + xdr.responseText); } function stopdata() { xdr.abort(); } function mytest() { var url = document.getElementById('tbURL'); var timeout = document.getElementById('tbTO'); if (window.XDomainRequest) { xdr = new XDomainRequest(); if (xdr) { xdr.onerror = err; xdr.ontimeout = timeo; xdr.onprogress = progres; xdr.onload = loadd; xdr.timeout = tbTO.value; xdr.open("get", tbURL.value); xdr.send(); } else { alert("Failed to create"); } } else { alert("XDR doesn't exist"); } } </script> </body> </html>
e文来源:http://msdn.microsoft.com/en-us/library/cc288060%28VS.85%29.aspx
加支付宝好友偷能量挖...
原创文章,转载请注明出处:XDomainRequest,IE8+跨域请求对象