2012-06-26 86 views
2

我最近重構了一些ajax代碼以使其異步。它之前完美的工作,但我想使用jQuery的承諾,所以我jQuerified它。但是,現在,除了IE之外,每個瀏覽器都可以使用ajax調用。jquery ajax僅在IE中失敗

IE9在ajax函數被分配變量名稱時拋出錯誤。在IE中的錯誤是:

「對象不支持此方法或99行上的屬性。」

下面是一大塊,其中發生錯誤:

if (screen.width > 525 && svgSupported) { 
    $loadingSvg = $.ajax({ 
     type: 'GET', 
     url: 'images/mypicture.svg', 
     dataType: 'xml', 
     success: function(data){ 
      console.log("Ajax request successfully returned: " + data); 
      console.log(data); 
     }, 
    error: function(data){ 
     console.log("Ajax request failed: " + data); 
     } 
}); 
} 

我已經嘗試了一些明顯的事情,其他人在類似情況下建議對SO,像JQ $(文件)。就緒包裝的一切。這並沒有解決它。變量在腳本的頂部全局聲明,所以不是這樣。任何想法,鄉親?

+0

這是一個友好的提示,您可能有上面的問題,因爲您的代碼每次請求相同的圖像。但是您可能想要注意在IE中發出GET ajax請求時發生的緩存。 IE會緩存您的GET請求,除非您在ajax選項中指定了=>「cache:false」。 或者你可以添加這個地方,載有所有你的JavaScript: $ .ajaxSetup({// 的AJAX響應禁用緩存 緩存:假 }); – antony

+0

謝謝,但這是我想要做的:緩存圖像,出於性能原因。我將默認的''true''離開緩存選項。如果發現一個GET請求被發現已經存在於瀏覽器的緩存中,那麼我認爲在所有情況下,該請求仍然會返回成功。(?)這一點上瀏覽器之間是否存在文檔差異? – Ben

回答

1

這個問題實際上是你console.log行:

console.log("Ajax request successfully returned: " + data); 

更具體地說,IE似乎無法用字符串,或者確實有一個字符串XML什麼來連接一個XML文檔。他們不支持.toString()。只要刪除該部分,並繼續工作:)

+0

或者使用'if(window ['console'])console.log('bla');'...它適用於所有瀏覽器,沒有錯誤。 –

+0

@NRohler:不,它不是'console.log',它不工作,它是''Ajax請求成功返回:''''和'data'的串聯。 (什麼,你不知道Internet Explorer有自己的一套廣泛的開發工具嗎?'') – Ryan

+0

我的錯誤來源錯誤...我瀏覽了IE * 9 *部分。但是早期的IE版本會拋出關於使用console.log的錯誤。 [未來好奇參觀者參考](http://stackoverflow.com/questions/690251/what-happened-to-console-log-in-ie8) –