2011-08-04 62 views
14

我使用這個頁面 - http://ecmazing.com/cors.html - 做一個跨域Ajax請求到這個資源:http://hacheck.tel.fer.hr/xml.pl交叉源Ajax請求在Opera和IE9中不起作用?

它工作在Chrome,Safari和Firefox,但在IE9和Opera沒有。

代碼:

var pdata = {'textarea': 'test'}; 

$.post('http://hacheck.tel.fer.hr/xml.pl', pdata, function(data, status, xhr) { 
    output.value = xhr.responseText; 
}); 

(預期的結果是一個XML代碼串)

見自己:http://ecmazing.com/cors.html

在IE9和Opera的error處理程序執行XHR對象並傳入此錯誤對象:

{ 
    readyState: 4, 
    status: 0, 
    statusText: 'error' 
} 

正如您所看到的,此錯誤對象不會顯示太多信息。

如何讓它在IE9和Opera中工作?

回答

9

參見條目cors at whencaniuse

對於Internet Explorer CORS「在IE8和IE9中使用XDomainRequest對象有所支持」,因此您需要使用備用對象才能使用它。

Opera根本不支持它。

如果您需要Opera中的跨域Ajax,請使用JSON-P。

+1

好的,這就排除了Opera。但我認爲jQuery在內部使用該XDomainRequest對象...我將去檢查jQuery的源代碼。 –

+0

不,在XQuery的源代碼中沒有提及''XDomainRequest''。我猜,jQuery現在不支持IE9和Opera中的跨域Ajax請求...... –

+0

JSON-P不適用於POST或其他請求。 –

6

我非常沮喪,試圖在IE和jQuery中使用CORS,我寫了一個library來平滑最糟糕的部分。

是的,微軟的現金和人力短缺導致他們無法在他們必須做的七年短暫的時間內使他們的瀏覽器適當地符合CORS標準,但我仍然更喜歡CORS到JSONP,坦率地說,黑客。