2009-04-23 41 views
14

我工作的一個腳本加載某些圖像異步使用jQuery。IE不觸發jQuery的阿賈克斯成功

下面是加載圖像的功能的代碼片段 -

try{ 
    for(img in imgsArray){ 
     $.ajax({  
      async: false, 
      type: "get", 
      url:imgsArray[img], 
      success:function(imgFile){ 
       alert("success"); 
       //do something useful 
      }, 
      error:function(XMLHttpRequest,status,error){ 
       //do nothing 
      } 
     });//ajax 
    } 
} 
catch(e){ 
    //oops 
} 

我已經在Firefox中測試了這個,Webkit的(野生動物園,鉻)和它的作品。

的圖像是在服務器上的文件夾中,我使用jQuery 1.3。

有什麼想法?

+0

我相信你已經看過在提琴手的反應如何?你在那看到什麼? – 2009-04-23 16:45:48

+0

錯誤函數是否被擊中?你應該在裏面放一些代碼,看看有什麼錯誤。 – Damovisa 2009-04-24 00:03:49

+0

是的,在你的catch中添加一個警報,看看它是否引發錯誤。也可能想要將其更改爲「GET」而不是「get」 – 2009-04-24 02:19:09

回答

16

此問題的一個簡單的解決方法是提供了jQuery設置dataType : 'text'dataType : 'xml'dataType : 'json'或任何其他可用的響應類型。

我有同樣的問題,但它規定在具體的數據類型設置後工作正常。阿賈克斯呼籲。

IE真的不是一個聰明的瀏覽器,它並沒有採用默認值的字符串。

嘗試...好運氣。

0

我建議使用Charles Proxy,看看發生了什麼事情 - 即是請求出去呢?什麼是迴應?

另外,我覺得可能會有一些異常拋出,那麼你爲什麼不處於閉鎖段看個究竟添加一些警報?

+0

我已經在ajax調用的開始和結束以及成功和錯誤函數中放置了警報語句。除「成功」之外,他們都被解僱了。在看了使用Fiddler的回覆之後,我發現IE只收回了404個響應。所以在Firefox中有202和404響應,但只有404與IE。我認爲這可能是IE安全模式和我的服務器設置。 – Peter 2009-04-24 09:50:45

1

我一直在用IE和AJAX在我的JSONP Web服務在過去幾天類似的問題。即使代碼中最小的錯誤也會導致IE中的所有內容都被破壞。

大概做使用的Visual Web Developer Express或Visual Studio是調試網頁在IE中最好的事情。這裏是如何做到這一點的教程:

How to debug JavaScript with Visual Web Developer Express

按照說明,也許將斷點上的AJAX請求的開頭。

嘗試這些東西太:

  • 從錯誤刪除場「XMLHttpRequest的」,我從來沒有使用它之前,我的代碼工作就好了;
  • 確保您使用的是最新版本的jQuery(1.3.2)嗎?

希望你得到它的工作不久!

1

在端我不得不創建IE瀏覽器的單獨的功能。

的目的是測試在一個位置的圖像,使代碼看起來是這樣 -

//get the images from the array 
for(img in imgsArray){ 

    if($.browser.msie){  
    /* DOM manipulation method */ 
    //IE has problems with ajax so try this instead 
    //create a new image object with unique ID 
    var testImg = $("<img/>"); 
    var imgID = "imgID"+img; 

    //hide it.. 
    testImg .css({ "visibility":"hidden" }); 
    testImg .attr("src",imgsArray[img]); 
    testImg .attr("id",imgID); 

    //.. and insert it into the DOM or else test will always fail 
    //because it does not exist as far as browser is concerned 
    $("body").append(testImg); 

    //test for image 
    if(document.getElementById(imgID).width > 60){ 
     //do something useful 
    } 
} 

這是不是真的回答我的問題,但它是圍繞職能工作。

7

我有一個類似的問題 - IE似乎觸發失敗,如果它不能解析響應爲XML,即使該請求是成功的,所以如果你請求一個圖片,例如,它會返回在錯誤塊中有200個xhr.status。

我堅持我的「成功」的功能在成功塊FF和錯誤塊包裹在一個「if(xhr.status == 200)」條件。

11

嘗試設置緩存選項設置爲false。

$.ajax({   
      async: false, 
      cache: false, 
      type: "get", 
      url:imgsArray[img], 
      success:function(imgFile){ 
        alert("success"); 
        //do something useful 
        }, 
        error:function(XMLHttpRequest,status,error){ 
        //do nothing 
      } 
    });//ajax 
-1

如果您使用的輸入檢查,如果你有一個選擇,「選擇」,如果你鴕鳥政策,即不通過這個參數來AJAX功能。

3

使用下面的標籤來支持跨瀏覽器

$ .support.cors = TRUE;

1

集 '緩存:假' 阿賈克斯的配置裏面對我的作品:)

0

,如果你的成功是:

Success: function (data) { 
        if (data != null) { 
         alert(data); 
         ; 
        } 
       }, 

改變此:

success: function (data, textStatus, XMLHttpRequest) { 
       alert(data.d); 
      } 
0

另一件事,你可以嘗試,大同小異,從約翰·桑德斯的解決方案,是試圖「JSONP」作爲內容類型,而不是JSON - 一個JSON數據類型期望的響應。我不得不用IE瀏覽器試試這個功能,讓我的bug消失,這是除IE以外的其他所有瀏覽器都能正常運行的代碼。

這裏是我的代碼工作:

$.ajax({ 
    url: request_url, 
    data: { var1: 'stuff' }, 
    dataType: "jsonp", 
    type: "get", 
    async: true, 
    cache: false, 
    success: function(collections) { 
     // handle result 
    } 
}); 

乾杯。

0

我來到了類似的問題,這個問題。上面的答案解決了我的許多問題。不過,我還需要做一個更多的技巧。不要使用

$.ajax({..., 
success: myfunc,...}); 

使用

$.ajax({..., 
success: myfunc(),...});