2011-05-26 167 views
5

我正在使用jQuery的ajax .get方法从我的服务器中检索数据。在Chrome中完美工作,但在IE9中,它不会发送Cookie标头,并打破了应用程序。任何想法为什么?这里是jQuery代码:IE9中的jQuery AJAX请求不发送Cookie标头

$.get(this.server + 'rest/photo/' + this.profileId + '/count', function(data) { 
    $('#imageCount').html(data); 
}); 

回答

1

我这里有同样的问题,我不能让jQuery的.ajax()功能工作。我发现的唯一的解决方法是这样的:

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" /> 

您可以将这个元标记添加到页面的顶部,以得到它的工作。但它不是一个好的解决方案。我认为问题在于IE9中的xmlhttprequest对象是不同的,所以jQuery找不到相应的对象,因此ajax不会触发。

0

多年后,我遇到了一个类似的问题,多年后,IE9仍然悬而未决。

我试过的每个浏览器,包括IE10 +,都将cookies传递给我的后端看起来不错,但IE9会放弃它们。它似乎没有关系到cookies的属性。主页面和API位于相同的域中,并且cookie匹配,方案相同。我没有对IFRAMES做任何事情,所以P3P 'potato' hack没有帮助。

所以我开始做一些关于IE9的研究,可能会有所不同。 This Microsoft post是很有启发性,并概述了所有事情的IE8和IE9做,以帮助锁定CORS安全漏洞:

  • 必须使用HTTP(S),和两个端点必须使用相同的方案
  • 必须使用GET/POST
  • 没有自定义页眉允许
  • 只有text/plain的内容类型允许
  • 到安全区域更高的灵敏度
  • 饼干会从请求剥离

有关cookie的最后一项让我想到,如果IE9认为我正在提出跨站点请求,那该怎么办?它当然看起来像是以这样的优良方式被击落。我已经检查了一些明显的东西,如计划和域名,但也许我没有检查一切。

解决方案?具体来说,我使用reqwest作为我的ajax库。它有一个交叉原点参数,由于某种原因,我留下的参数设置为true。将它(正确地)设置为false会产生诀窍 - 我的所有cookie都由服务器提取。所以这是一个愚蠢的错误,但我学到了一两件事。

希望这可以帮助别人!