【发布时间】:2011-09-20 02:05:21
【问题描述】:
我有一些 Ajax 代码可以在 Safari、Chrome 和 Firefox 中运行,但不能在 IE9 中运行。
该页面位于http://foo.com/test.aspx 上,它正在向https://service.foo.com 上托管的网络服务发出 AJAX 请求。我以为我不会有任何跨域问题,但鉴于 IE9 阻止了它,看来我有:(
var tempUrl = "https://service.foo.com/dummy.svc/test?hi=bye";
$.get(tempUrl, "html");
正如我所提到的,该代码在其他 3 种浏览器中都可以工作,只是不能在 IE9 上工作。 (我只关心 IE9,不关心 IE8 或更早版本)。
我做了一些挖掘,在 MSDN 上找到了this article,上面写着:
跨域请求需要相互 网页与用户之间的同意 服务器。您可以发起一个 网页中的跨域请求 通过创建 XDomainRequest 对象 关闭窗口对象并打开一个 连接到特定域。这 浏览器会从 通过发送 Origin 域的服务器 标头与原点的值。 它只会完成连接 如果服务器响应 Access-Control-Allow-Origin 标头 * 或确切的 URL 请求页面。这种行为是一部分 万维网联盟 (W3C) 的 Web 应用程序工作 集团的客户端框架草案 跨域通信 XDomainRequest 对象集成。
在我走上使用 XDR 的道路之前,我想与比我聪明的人验证这是否是正确的方法。
- 将
Response.AddHeader("Access-Control-Allow-Origin", "*");添加到我的页面 - 创建检测 IE9 并使用 XDR 的条件 jscript 代码,而不是我与
$.get一起使用的常规 jquery 调用。
我是完全离开还是这样做的正确方法?
(假设这是正确的方法,Acecss-Control-Allow-Origin 响应标头在哪里——在我的页面上http://foo.com/test.aspx 或在网络服务上https://service.foo.com?)
【问题讨论】:
-
一般来说,JQuery 知道浏览器的同源限制,不应该在不支持 CORS 的浏览器中尝试使用它。您是否在 IE9 的 F12 开发者工具控制台中看到脚本错误?
-
Eric,开发工具控制台中没有抛出错误。
标签: ajax cross-domain internet-explorer-9