我有以下情况。
来自位于 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报告了许多配置
答案 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);