2009-12-15 75 views
1

我有一個包含元素<displayedimage>的頁面,它沒有在IE 6和IE 8中使用jquery的document.ready/$。getJSON函數獲取更新(可能即使我沒有測試IE 7也是如此)。這同樣的功能在XP Safari和OS X Safari,OS X Chrome,OS X Opera等等上運行良好。因此,發生了以下情況:

我有一個元素,在第一次加載時爲空,但獲取由執行的document.ready JavaScript方法填充:

​​

得到由更新:

function loadFirstImage() { 
     $.getJSON("/servlet/access/image/" + id, 
      function(json) { 
       $("displayedimage").html("<a href=\"/servlet/images/" + json.images[0].filename + "\"><img src=\"/servlet/images/s_" + json.images[0].filename + "\"></img></a>"); 
       $("imagelabel").html(json.images[0].label); 
      }); 
} 

如上所述,該系統工作正常,在OS X Safari瀏覽器,OS X瀏覽器,OS X歌劇,XP Safari,但似乎沒有在XP IE中做任何事情。我已經在loadFirstImage方法中執行了簡單的調試(alert(「loadFirstImage called」)),並且它給了我一個警告,所以它似乎可能是一些.getJSON問題?對於從這樣的東西開始的任何建議?謝謝。

+2

我從來不知道的HTML 'displayimage' 標籤。 – 2009-12-15 06:27:05

回答

2

使用任意的DOM元素名稱可以給你這樣那樣的問題和矛盾。

你爲什麼不只是簡單地用一個標準的元件,如divspan也許?:

<div id="imagecontrol"> 
    <div id="displayedimage"></div> 
</div> 

並在您的$.getJSON回調中設置它的內容:

$("#displayedimage").html(/*...*/); 

瀏覽器將接受任何標記,即使它不是合法的HTML。由此,這意味着瀏覽器將嘗試猜想關於你的可能是的含義。這可能會導致瀏覽器兼容性問題與您現在的瀏覽器兼容性問題相同,因此我建議您使用validate標記。

+0

我認爲我可以在IE中創建任何我想要的元素名稱。謝謝您的幫助。 – labratmatt 2009-12-15 19:09:34

0

與語義學對試用

<div id="imagecontrol"> 
    <div id="displayedimage"></div> 
</div> 

JS

$.getJSON("/servlet/access/image/" + id, 
    function(json) { 
    $("#displayedimage").html("<a href=\"/servlet/images/" + json.images[0].filename + "\"><img src=\"/servlet/images/s_" + json.images[0].filename + "\"></img></a>"); 
}); 
+0

很好的答案和例子。謝謝您的幫助。 – labratmatt 2009-12-15 19:11:12

0

由於您使用的自定義標籤,你有沒有明確創建這些標籤的需要IE瀏覽器?把這個在您的網頁head

<!--[if IE]> 
<script type="text/javascript" charset="utf-8"> 
    document.createElement('displayedimage'); 
    document.createElement('imagelabel'); 
</script> 
<![endif]--> 

爲了記錄:我與你應該堅持有效的標籤,或者您可以以後碰到重名其他的答案一致。

+0

感謝您的幫助。我用標準標籤和瞧,它的工作。定義自定義標籤的好例子。 – labratmatt 2009-12-15 19:14:13

0

還要注意的是,如果$.getJSON多次調用在同一個頁面(可能按一下按鈕或類似的結果),在IE 7/8您數據將不會被更新上,因爲IE緩存AJAX默認請求(例如,Chrome和FF不這樣做)。

解決方案是使用$.ajax方法,而不是($.getJSON$.ajax的包裝方法):

$.ajax({ 
     url: 'JSON_SOURCE_URL', 
     dataType: 'json', 
     cache: false, // 'cache: false' must be present for IE 7 & 8 
     success: function(data) { 
     // do your thing with 'data' 
     } 
    });