2010-06-30 178 views
3

有一些直接的AJAX代碼適用於Firefox和Chrome,但不適用於IE。我沒有做任何事情,但代碼太長,不能在這裏發佈。

從本質上講,它是:

<script type="text/javascript"> 
var baseurl = 'http://mydomain.com/facebook/'; 
var setUpGame = function(lvl){ 
    var ajaxurl; 
    ajaxurl = baseurl+'ajax.php?f=gg&l='+lvl; 
    $.getJSON(ajaxurl,function(data){ 
        //do stuff with data here 
    }); 
}; 
$(document).ready(function(){ 
    setUpGame(3); 
}); 
</script> 

的問題是,IE有$ .getJSON問題。調用堆棧顯示它在jQuery(第123行,第183列)中失敗,jQuery代碼顯示「return new A.XMLHttpRequest」

錯誤消息是「錯誤:對象不支持此屬性或方法」。我已經驗證了ajaxurl變量具有正確的值,並且該URL返回正確的JSON。

這是否會發生,因爲所有這些都在iFrame內運行?

+1

您使用的是jQuery 1.4.2嗎? – tcooc 2010-07-01 00:16:02

+0

嘗試使用相對網址而不是基本網址...我在過去遇到過一些麻煩。 – Mottie 2010-07-01 01:18:29

+0

相對URL無效:( 當我使用IE的腳本調試器進行調試時,它顯示紅色的ajaxurl變量,變量的值是正確的,數據類型是字符串,但值顯示爲紅色。那有幫助嗎? – tinkerr 2010-07-01 01:52:57

回答

1

我從jQuery 1.4.2切換到1.3.2,此問題消失。

+0

請確保您將此標記爲正確/被接受的答案:) – 2010-07-01 04:48:11

+0

我在dev.jquery.com上創建了一個錯誤報告。不過,我不想跳槍。如果他們調查並回到其他原因導致錯誤,我會在這裏發佈正確答案。 – tinkerr 2010-07-01 05:22:01

3

花了我幾個小時才弄明白,所以希望我能救別人頭疼。

如別處所述,IE不使用XMLHttpRequest。

但是,其他地方發佈的許多解決方案都不適用於我。

我想:

  1. jQuery.support.cors = true; 但是,這似乎並沒有做任何事情。

  2. 如果這是一個單例函數,JSONP將起作用。但是我正在一個相對複雜的對象中工作,這個對象需要在一個頁面上有多個實例,但回調只能在全局名稱空間中工作,並且碰到碰撞......非常難看的碰撞。

  3. $ .getScript不適用於我,因爲我需要真正按摩返回的json數據。雖然'script'dataType不會引發XDomain訪問錯誤,但它也不會將實際數據返回到我的.success回調函數。

  4. $ .getJSON不適用於IE8 - 它會引發「訪問被拒絕」錯誤。基本上遇到CORS問題。而全球層面上的任何事情似乎都沒有幫助。

所以,我發現了什麼作品如下:

$.ajax({ 
    url : remote_cross_domain_non_local_url, 
    dataType : 'jsonp' 
}) 
.success(function(data){ dosomethingwithdata(data); }); 

這是一種黑客攻擊的,因爲我指定即使是在回來的數據沒有包裝功能的JSONP數據類型。但爲了解決IE瀏覽器的XDomain問題,我們必須欺騙它,認爲我們正在獲取JSONP腳本。