我有一些Ajax代码在Safari,Chrome和Firefox中运作正常,但在IE9中却不能。该页面位于
(假设这是正确的方法,
http://foo.com/test.aspx
,正在向托管在https://service.foo.com
上的webservice发出AJAX请求。我以为不会有任何跨域问题,但是由于IE9阻止它,似乎我确实有问题:(var tempUrl = "https://service.foo.com/dummy.svc/test?hi=bye";
$.get(tempUrl, "html");
正如我所提到的,这段代码在其他三个浏览器中可以正常工作,但在IE9中无法正常工作。(我只关心IE9,不关心IE8或更早版本)。
我进行了一些调查,并在MSDN上找到了这篇文章,上面写着:
跨域请求需要Web页面和服务器之间的相互同意。您可以在Web页面中创建一个XDomainRequest对象并打开到特定域的连接来启动跨域请求。浏览器将通过发送具有来源值的Origin头从域的服务器请求数据。只有当服务器响应具有*或请求页面的确切URL的Access-Control-Allow-Origin头时,它才会完成连接。这种行为是世界范围内Web Consortium(W3C)Web应用程序工作组的草案框架的一部分,XDomainRequest对象与之集成。在使用XDR之前,我想验证比我聪明的人是否这样做是正确的方法。- 将
Response.AddHeader("Access-Control-Allow-Origin", "*");
添加到我的页面 - 创建条件jscript代码,检测IE9并使用XDR而不是我正在使用的常规jquery调用
$.get
。
(假设这是正确的方法,
Acecss-Control-Allow-Origin
响应头放在哪里——是放在我的页面http://foo.com/test.aspx上还是放在https://service.foo.com的Web服务上?)