10

我正在尝试从多个域向一个将处理请求的域进行 AJAX 调用。通过在处理服务器上设置标头很容易在 Firefox 和 Chrome 中启用跨域:

header("Access-Control-Allow-Origin: *");

但这无助于在 Internet Explorer 中启用它。当我尝试:

httpreq.send('');

它以错误访问被拒绝而停止。

如何在 Internet Explorer 中启用此功能?

4

6 回答 6

12

自从我第一次在 IE7 及更高版本中发布我的 CORS 解决方案以来,发生了很大变化。首先,jQuery 属性 $.support.cors 默认为 true,.NET 框架 4.0 及更高版本不再支持在 3.5.1 及更低版本中实现的 CORS。在使用 ASP.NET 4.0 编写 Web 服务时,我安装了 Thinktecture.IdentityModel,它可以作为 NuGet 包使用。然后,在 Global.asax 文件的 Application_Start 方法中,添加:

void Application_Start(object sender, EventArgs e) 
{ 
    Thinktecture.IdentityModel.Http.Cors.IIS.UrlBasedCorsConfiguration.Configuration
        .ForResources("*")
        .ForOrigins("http://localhost:80, http://mydomain")
        .AllowAll()
        .AllowMethods("GET", "POST");
}

现在在 system.webServer 中添加 httpProtocol 元素:

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Headers" value="Content-Type, Accept, X-Requested-With, X-File-Name" />
    <add name="Access-Control-Allow-Methods" value="GET, POST" />
  </customHeaders>
</httpProtocol>

我的 $.ajax 调用现在是:

$.ajax({
    url: serviceUrl, 
    data: JSON.stringify(postData),
    type: "POST",
    cache: false,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: onSuccess,
    error: onError
});
于 2012-06-13T15:46:08.307 回答
9

您是否尝试过启用跨域访问数据源 在此处输入图像描述

于 2015-09-11T08:08:48.273 回答
5

我不相信您可以直接在 Internet Explorer 中执行此操作。你有几个选择:

  • 在您控制的可以转发 Ajax 请求的服务器上设置代理转发脚本。确保它只转发到您需要的适当目的地,以免您变成匿名中继。

  • 使用document.domain技巧。基本上,您需要创建一组iframes,一个用于您需要进行 Ajax 调用的每个服务器。在每个iframe集合中,document.domain属性与您需要将 Ajax 请求发送到的域完全匹配。至于如何填充必要的数据,请在设置之前使用 DOM 操作document.domain。请注意,此技巧要求目标服务器位于原始服务器的子域中。本文中的更多内容,带有示例。

于 2010-01-11T20:43:39.590 回答
3

我让 IE8 和 9 只使用 jQuery $.ajax(jQuery 版本 1.7.2)

jQuery.support.cors = true;
jQuery(function() {
$.ajax({
    crossDomain : true,
    dataType: 'html',
    //...
    });
});
于 2012-06-04T18:51:18.063 回答
1

对于 Internet Explorer 8,您需要对 FF3 执行类似操作,即使用“Access-Control-Allow-Origin”标头并使用 XDomainRequest 对象而不是 XMLHttpRequest。此处对 IE8 进行了详细说明:http: //msdn.microsoft.com/en-us/library/dd573303%28VS.85%29.aspx

旧版本的 IE 不支持跨站点访问控制也不支持 XDomainRequest 对象。但是还没有结束,您可以使用 IFrame 技巧,例如,创建一个不可见的 IFrame 来调用您的函数,如下所述:http: //softwareas.com/cross-domain-communication-with-iframes

于 2010-04-05T12:08:07.070 回答
0

只需添加到 Eric 的答案,对于旧版本的 IE,您可以使用 Jquery 1.4.2 的 $.ajax 方法,默认情况下允许跨域请求,或者对于跨域 JSON,您可以使用

jQuery.getJSON(String url, Map data, Function callback) 返回 XMLHttpRequest

Jquery 文档的摘录。

“jQuery 现在原生支持 JSONP - 如果您尝试从远程 URL 加载 JSON(通过 $.getJSON 或 $.ajax),那么将为服务器提供额外的回调来解释。”

于 2010-08-02T08:20:10.330 回答