2012-11-24 34 views
1

我在從IE中的JSON feed獲取數據時遇到了問題。讓JSON在IE中工作

這是測試。它提醒在FF,Chrome瀏覽器,Safari瀏覽器,而不是IE:

function do_something(data){ 
    alert(data); 
} 

$(document).ready(function() { 
    $.getJSON('https://www.mec.ca/api/v1/stores/1', do_something); 
}); 

而這裏的小提琴:http://jsfiddle.net/upksp/

我曾嘗試以下解決方案看似相關,沒有運氣的問題:

我不禁想到它可能是一個頭的問題,但不知道他們足夠的診斷。我已經成功地在同一頁面上使用JSONP,沒有任何問題,並且我沒有看到任何衝突。幫幫我!


注:對於我工作的代碼,該API將在同一個域(1)作爲被請求它的腳本。然而,對於測試,他們將有不同的子域(2),如www.domain.com vs environment.domain.com。我認爲(2)會有問題,但(1)會正常工作?

+0

您無法對另一個域執行請求。 http://stackoverflow.com/a/8449129/251311 – zerkms

+1

在爲該JSON文件發出Ajax請求時,服務器響應包含一個「access-control-allow-origin:http:// fiddle.jshell.net」HTTP -header,這意味着服務器使用CORS並返回請求的Origin,允許所有跨域請求。但是,IE不支持CORS,但它確實爲跨域Ajax請求提供了另一種方法。有些插件可以在IE中啓用此功能,例如https://gist.github.com/1114981 –

+0

@zerkms CORS在該特定服務器上啓用。只是jQuery不提供IE的CORS功能。當然,跨域Ajax請求是可能的,OP的代碼可以在非IE瀏覽器中運行。 –

回答

1

由於瀏覽器安全的原因,您無法向一個來源發送請求(例如jsfiddle.net到www.mec.ca)。近年來,瀏覽器開始利用CORS(跨源資源共享)來規避這種情況。這允許瀏覽器向另一個域發出請求,只要該服務器(www.mec.ca)配置爲接受它們即可。您可以在響應頭中檢查這一點。對於您的網址(https://www.mec.ca/api/v1/stores/1),CORS已啓用。你可以在所說的行的響應標題中看到它。 Access-Control-Allow-Origin: *。這意味着請求從任何域(*)

HTTP/1.1 200 OK 
Date: Sat, 24 Nov 2012 01:19:23 GMT 
Server: Apache 
Content-Language: en 
Access-Control-Allow-Origin: * 
X-Powered-By: Servlet/2.5 JSP/2.1 
Vary: Accept-Encoding,User-Agent 
Transfer-Encoding: chunked 
Content-Type: application/json 

允許由於IE已經落後在實施CORS標準的後面,它沒有添加到IE直到IE10。因此,你的小提琴在以前的IE版本中不起作用。

+1

IE確實爲跨域Ajax請求提供了一種替代方法。只是jQuery沒有使用這個方法(但是有插件可以)。 –

+0

是的,你是對的。你可以使用'new XDomainRequest()'對象。我編輯我的答案說,小提琴不會工作,而不是說跨域請求不會工作。 – teddybeard

+0

但是,我在https://頁面上使用了mec.ca,沒有進一步更改,但沒有http://。 IE對待這些協議和不同的域名? – chicgeek