jQuery的.load()在IE8及以下版本无法插入数据

4
我全天都在寻找解决方案,但仍然看到这个错误。
这是一个Expression Engine的设置,我们为客户实现ajax导航。为此,我们使用了默认的$.load()函数,在ie9、FF、Safari、Chrome、Opera中运行得非常完美......但在ie8及以下版本中不起作用。
我已经测试了回调函数,它确实被调用,数据也被发送,我可以在控制台中记录并读取它。但由于某种奇怪的原因,数据没有被插入。
以下是代码:
load_page: function(url, func){
    $('#content').load(url+' #content>div', function(data, textStatus, jqXHR){
        console.log('page loaded!');
    });
}   

回调函数中有很多额外的代码,但我一直在清理整个javascript/css等等的所有内容。 寻找错误,但没有发现。

根据评论,我决定添加URL和下载链接:

谜题的另一个部分: javascript中有一些奇怪的东西。 即使是google地图api也无法正常工作,这是我第一次使用google地图api遇到这种问题。

编辑:已回答

我终于找到了这个问题的答案,感谢@epascarello。 实际上,这是我尝试导入数据时出错了。 由于IE8及以下版本不理解HTML5,它们将尝试将元素导入dom中,但是当警报数据时,我看到以下内容:[object HTMLUnknownElement],[object HTMLUnknownElement],[object HTMLUnknownElement],...

当我将数据标记更改为使用良好的旧div而不是article元素时,一切正常!


2
这可能只是遗漏的代码,但你是否关闭了函数?我只看到一个}。 - Jere
1
正在加载的数据是什么? - epascarello
可能是数据加载时出现了问题,只有在IE8中才会出现错误。 - Didier Ghys
在上面的代码中,有一个缺少的括号。在复制这段代码时,我可能清理得太干净了:p 您可以在此处查看网站:http://track.be/devo_9836/nl/ee.php@Jere:即使我将其中所有代码都注释掉,它仍然无法插入HTML。 - Stijn_d
可能重复:http://stackoverflow.com/questions/4968937/cannot-get-image-preloading-to-work-correctly-in-ie8 - feeela
@feeela 这个问题大约有1年的历史,我已经自己回答了这个问题。 - Stijn_d
5个回答

3
我遇到了同样的问题,发现如果URL返回无效的HTML(例如多余的结束标签),它可能会停止加载或找不到正确的元素。
在我的例子中,我只需要纠正URL中的HTML,然后它就可以正常工作了。

2
Ajax请求在IE8中被缓存,所以只需要在使用load函数之前加上一点魔法:

$.ajaxSettings.cache = false;

http://zacster.blogspot.in/2008/10/jquery-ie7-load-url-problem.html

http://api.jquery.com/jQuery.ajax/

缓存(默认值:true,对于dataType为“script”和“jsonp”则为false) 类型:布尔值 如果设置为false,则会强制浏览器不缓存所请求的页面。注意:将cache设置为false只能正确地使用HEAD和GET请求。它通过将“_={timestamp}”附加到GET参数来工作。对于其他类型的请求,该参数是不必要的,除非在IE8中对已被GET请求过的URL进行POST请求时。

答案。这就是它。 - dkellner

1

我唯一看到这段代码有问题的地方就是你缺少了一个闭合括号

load_page: function(url, func){
     $('#content').load(url+' #content>div', function(data, textStatus, jqXHR){
           console.log('page loaded!');
     } // <-- this one
}); 

真的,复制代码时犯了一个错误。我已经检查过我的脚本,那里的代码是正确的。否则控制台会一直输出错误。 - Stijn_d

0

$.load() 在 IE8 中可以正常工作。我猜测你之前可能有一个 JS 错误,只会在 IE8- 中触发,从而阻止它正常运行或完全调用。


我已经创建了一个测试,你可以在这里下载:http://stijnd.be/ie8_load.zip - 同样的问题。 - Stijn_d
1
对于已经存在于浏览器缓存中的文件,在IE8中不会触发load事件。 - feeela

-1
问题在于某些函数在一个浏览器中受支持,而在其他浏览器中则不受支持。例如,我个人讨厌的一点是innertext仅在ie7、8中受支持,而不在fox或chrome中受支持。如果您感兴趣,这里是兼容性表http://www.quirksmode.org/dom/w3c_html.html
底线是,除非您计划自己更改插件并且已经尝试过modernizer但没有帮助,否则您将不得不使用另一种加载数据的方法。我的建议是使用.html,您不会出错,或者在js中手动形成html。简单总是最好的解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接