使用jquery获取子域html页面

时间:2012-04-24 17:19:15

标签: jquery cross-domain

我有以下情况。

来自位于 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>

以下网站向许多服务器类型的enable CORS报告了许多配置

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

使用JSONP获取数据

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

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

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

答案 2 :(得分: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);