2011-05-26 171 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都由服務器提取。所以這是一個愚蠢的錯誤,但我學到了一兩件事。

希望這可以幫助別人!