1

我有以下情况。

从位于https://subdomain.mydomain.com的应用程序中,我试图获取位于https://mydomain.com/page.aspx的页面的 html

我正在使用 jquery $.ajax方法执行此操作。

    $.ajax({
        url: url,
        type: 'GET',
        contentType: 'application/x-www-form-urlencoded',
        success: function (data, status, xhr) {
            console.info("success");
        },
        error: function (xhr, status, error) {
            console.error(error);
        }
    });

实际调用并执行 aspx 页面。

IE(通过 XDomainRequest)和 Firefox 具有相同的行为:从检查器(IE 开发工具和 Firebug)我看到响应状态为200 OK,它具有预期的大小(80KB),但响应内容为空。jQuery 错误不是那么有用:

    readyState: 0,  
    responseText: ""
    status: 0,
    statusText: "error"

我想这是涉及同源政策的事情。我看到人们用 YQL(但我不想使用额外的库)和 JSONP(但我正在使用纯 HTML)解决这类问题。

在绝望的时刻,我也尝试过类似的技巧

    document.domain = 'mydomain.com';
    jQuery.support.cors = true;

没有成功。任何提示?


问题是由于Access-Control-Allow-Origin必须在被调用的应用程序上启用。在我的例子中,它是 IIS7 主机中的一个 asp.net 应用程序。我不得不在 web.config 中添加这些行:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <system.webServer>
   <httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Origin" value="*" />
     </customHeaders>
   </httpProtocol>
 </system.webServer>
</configuration>

以下网站报告了许多配置以在许多服务器类型上启用 CORS

4

3 回答 3

3

为了使用 IE 或 FF 的跨域请求,您需要调整服务器端以发送Access-Control-Allow-Origin带有响应的标头。如果你想使用document.domain它,不仅要在请求端设置,而且在响应端也要设置。因此,您可以使用 iframe 发送此类请求或使用 SCRIPT 或 JSONP,因为它们没有跨域限制。

于 2012-04-24T17:42:25.527 回答
1

使用 JSONP 获取数据

function myFunc() {
    console.info("success");
}

$.ajax({
    url: url,
    'dataType': "jsonp",
    'jsonp': "callback",
    'jsonpCallback': "myFunc"
});

问题是您试图从另一个域发出 XHR 请求,这是不允许的。您告诉 jQuery 允许 CORS,但 JSONP 是一种更好的方法。您将需要设置服务器端代码以返回 JSON 数据中的 html,该数据包装在加载 URL 时要调用的函数中。

于 2012-04-24T17:32:37.823 回答
0

简单的javascript就足够了

alert(document.domain);

console.log("Output;");  
console.log(location.hostname);
console.log(document.domain);
alert(window.location.hostname)

console.log("document.URL : "+document.URL);
console.log("document.location.href : "+document.location.href);
console.log("document.location.origin : "+document.location.origin);
console.log("document.location.hostname : "+document.location.hostname);
console.log("document.location.host : "+document.location.host);
console.log("document.location.pathname : "+document.location.pathname);
于 2016-06-03T12:51:26.983 回答