2009-12-15 74 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' 
     } 
    });