2013-02-15 107 views
0

我想從使用jQuery的ajax函數的遠程服務器獲取一些json。jQuery ajax調用不工作在IE

var self = $(this); 
$.ajax({ 
    cache: false, 
    url: *external url*, 
    data: {param: self.val()}, 
    type: 'GET', 
    dataType: 'application/json', 
    crossDomain: true, 
    success: function(data, status) { 
     console.log(status); 
     console.log(data); 
    } 
}); 

這在Chrome中正常工作,數據得到輸出。在Firefox中,請求被髮送,但沒有數據寫入控制檯。在IE中,這個通話似乎根本不會被髮送。

我在做什麼錯?我知道關於跨域阻塞,但是讓我失望的是,它可以在Chrome中運行,但不能在任何其他瀏覽器中運行。

在此先感謝!

+0

你怎麼知道它在Chrome中工作?嘗試添加一個'錯誤'處理程序。 – BenM 2013-02-15 15:28:11

+0

拿出crossdomain,然後做這個工作嗎? – CR41G14 2013-02-15 15:30:25

+0

在鉻,成功函數得到正確調用,內容輸出到控制檯,所以我覺得它的工作:) – Mikau 2013-02-15 15:32:01

回答

0

我知道關於跨域阻塞,但是讓我失望的是,它可以在chrome中工作,但不能在任何其他瀏覽器中工作。

這聽起來像你的要求,從支持CORS數據的服務器,但要記住,不同的瀏覽器可能與請求一起發送不同的頁眉和CORS請求將失敗,如果一個瀏覽器發送一個報頭,服務器不說沒關係。因此,Chrome只能發送服務器已批准的標頭,所以請求可以正常工作,但Firefox正在發送服務器不允許的標頭,因此請求不起作用。

除非您使用的是IE10,否則IE可能無法正常工作,因爲跨域請求在IE中不起作用,除非您使用XDomainRequest對象而不是XMLHttpRequest對象,並且jQuery不會這樣做。有補丁可以做到這一點,但jQuery庫本身並不是。 IE10 終於通過標準的XMLHttpRequest對象啓用CORS。

+0

我在IE9上,所以可能是這樣,在這種情況下,請求也不會被髮送,對嗎?有沒有辦法解決這個問題,而不修補jQuery? – Mikau 2013-02-15 15:40:15

+0

@Mikau:我不知道在使用XMLHttpRequest時,IE9在什麼時候強制執行SOP,但是完全不發送它是合理的,是的。唯一的解決方法是自己直接使用'XDomainRequest',修補jQuery(快速搜索應該找到某種東西),或完全繞過SOP,完全不使用ajax(可能試試[JSONP](http://en.wikipedia.org/wiki/JSONP#JSONP),如果服務器支持它 - 並且它支持CORS,並且給你JSON,我希望它也有一個JSONP選項)。 – 2013-02-15 16:06:14