通过ajax加载的Div内容不会出现在IE中

时间:2011-08-02 20:52:33

标签: ajax internet-explorer

这是ajax调用:

function loadContent( url ) {
 jQuery.ajax({
        url: url,
        success: function(data) 
        {           
          // set content
          jQuery("#overlayDiv").html(data);

          // hide loading spinner
          jQuery("#overlayCleared").hide();          
        }
      });
}

它在除IE之外的所有其他浏览器中都可以正常工作,其中div仍然是空的.. :(

我正在使用的CSS是:

div#overlayDiv {
    overflow: auto;
    position: relative;
    height: 95%;
}
div.video_overlay { /* this class will be added to the div using jQuery */
    padding-left: 0px;
    width: inherit;
    top: 35px;  
}

我该怎么办?

非常感谢

3 个答案:

答案 0 :(得分:1)

实际上,还有可能遇到IE Ajax缓存问题,其中IE倾向于缓存来自GET请求的结果。请参阅http://ajaxian.com/archives/ajax-ie-caching-issue

解决方案是使用POST(注意:jquery默认为GET)

答案 1 :(得分:0)

我几天前遇到了同样的问题,我只是做了这个改变,它解决了这个问题。

(*考虑url指向localhost) 确保您的网址在例如

上进行测试时指向127.0.0.1

使用------> http://127.0.0.1/ 而不是----> http://localhost/

答案 2 :(得分:0)

我刚刚为需要IE8兼容性的大型HTML5应用程序解决了同样的问题。 Ajax调用返回的HTML非常复杂,包含带有大量JQuery和独立JavaScript代码的SCRIPT标记。

除了众所周知的IE缓存问题(以及其他一些问题)之外,这种问题的关键还在于IE在将dinamic HTML内容加载到任何元素时非常挑剔,在我的情况下它是一个DIV。 IE不仅会挑剔,而且会显示一种随机行为,比如呈现返回HTML的一部分,或者根本没有任何明显的部分呈现HTML和最终发现的编码问题之间的关系。

最重要的是,它不会引发任何HTML编码错误,这使得它成为调试此类场景的真正难题。在我的情况下,我别无选择,只能重复90年代的调试技术。我通过在此浏览器的检查视图中复制节点代码从Chrome中获取返回的HTML代码,将其放入一个平面的.html文件中,并使用此服务器端代码从平面文件中读取代码。

    $myfile = fopen("flatfile.html", "r") or die("Unable to open the file");
    echo fread($myfile,filesize("flatfile.html"));
    fclose($myfile);

从那时起使用返回的代码并将其输入到容器对象中,首先将其分成两部分(让每个部分自己成为一段连贯的代码),看看这两部分的哪一部分被渲染,哪些不是以及每个部分等等,直到找到有问题的代码。

需要注意的一件重要事情是IE8无论HTML和Javascript的混合程度如何都会有效,您只需要痛苦地调试代码即可。如果我这样说是因为你会发现很多帖子说明IE7,8无法处理复杂的Ajax返回代码,或者JQuery的.html()属性在这种情况下无法工作。这不是真的,花点时间,你会发现问题所在,不要放弃。