9

这是我使用的代码如下:

我正在使用 IE9,无法在“网络”选项卡中看到正在发送的请求。我确实在 JSP 中设置了 Access-Control 标头:

<% response.setHeader("Access-Control-Allow-Origin", "*");%>

从 JSP 获取 AJAX HTML 内容的代码:

if ($.browser.msie && window.XDomainRequest) {

    var xdr = new window.XDomainRequest();
    xdr.open("GET", "http://dev01.org:11110/crs/qw/qw.jsp?&_=" + Math.random());
    xdr.contentType = "text/plain";
    xdr.timeout = 5000;
    xdr.onerror = function () {
        console.log('we have an error!');
    }
    xdr.onprogress = function () {
        console.log('this sucks!');
    };
    xdr.ontimeout = function () {
        console.log('it timed out!');
    };
    xdr.onopen = function () {
        console.log('we open the xdomainrequest');
    };
    xdr.onload = function() {
        alert(xdr.responseText);
    };
    xdr.send(null);
} else { ...... }

我收到拒绝访问错误。任何帮助将非常感激!

4

2 回答 2

1

请求必须针对与托管页面相同的方案

在您的示例中,您正在请求:

http://dev01 ...

您应该从 HTTP 协议执行此操作。

例如:如果您的站点,js脚本所在的位置:http://dev.org 您可以这样做:

xhr = new XDomainRequest();
xhr.open("GET", "http://dev01.org?p=1");

但这会引发“访问被拒绝”:

xhr = new XDomainRequest();
xhr.open("GET", "https://dev01.org?p=1");
于 2013-06-10T16:19:40.650 回答
0

我对 XDomainRequest 的经验是它不尊重Access-Control-Allow-Origin: *. 相反,您必须指定域。如果您需要动态生成它,可以从 HTTP_REFERER 标头中获取它,或者如果您只期望来自一个域的请求,您可以手动设置它。 这篇文章可能会有所帮助。

<% response.setHeader("Access-Control-Allow-Origin", "http://dev01.org");%>
于 2013-08-09T01:31:11.500 回答