jQuery .load()无法在IE中运行 - 但在Firefox,Chrome和Safari中都很好

时间:2009-06-30 03:01:20

标签: internet-explorer jquery

我正撞在墙上对着这个人......

我有以下代码:

$("#home").click(function(e) {
    $(".tabs").attr("src","tabs-home.gif");
    $(".islice").hide('fast');
    $(".islice").load("home.html");
    $(".islice").show('fast');  
    e.preventDefault();
});

它在Firefox,Safari和Chrome中运行得非常好,但IE只运行attr()并且不执行隐藏/显示或加载。我试图删除隐藏和显示它仍然无法正常工作。

IE报告没有语法错误,即使使用DebugBar也是如此。我能做错什么?

您可以在http://www.brick-n-mortar.com

查看实际网站

15 个答案:

答案 0 :(得分:47)

我遇到了同样的问题。我发现的许多网站都建议IE可能会缓存您的代码并建议将代码附加到

$("#home").click(function(e) {
    $(".tabs").attr("src","tabs-home.gif");
    $(".islice").hide('fast');
    $(".islice").load("home.html?" + new Date().getTime() );
    $(".islice").show('fast');
    e.preventDefault();
});

这应该确保IE不缓存。

有关详细信息,请参阅http://zacster.blogspot.com/2008/10/jquery-ie7-load-url-problem.html

答案 1 :(得分:16)

$ .ajaxSetup({cache:false});

这将清除IE中的缓存并且.load()将起作用。我试过了。

答案 2 :(得分:13)

如果你加载的HTML坏了,jQuery的.load()将无法在IE中运行。 这对我来说是个问题。修复HTML之后,IE中的一切都很棒!

答案 3 :(得分:6)

我遇到了这个问题,整天都在摸不着头脑。然而,终于找到了解决方法并实现了一个怪异的IE。

首先,

$(".islice").load("home.html"); 
无论我们怎么努力,

都行不通。我们将不得不使用

$.get("home.html", function (data) ....... ); 

我会解释“.....”因为通常的

$.get("home.html", function (data) { $(".islice").html(data); }); // doesn't work

无效。

相反

$.get("home.html", function (data) { 
    data = '"' + data + '"';    
    $(".islice").html(data);
    var newHTML = $('.islice').html();
    $('.islice').html(newHTML.substr(1,newHTML.length-2));
}); // works

会奏效。

说明:=>数据可能有新的行号。所以设置innerHTML = data;因为他们而休息。通过添加引号,我们将其转换为字符串,但使html添加额外的引号,以便我再次删除引号。

道德:=> IE糟透了..没有别的..

答案 4 :(得分:4)

我发现.load()函数在IE上运行效果不佳,但使用$ .get()却效果很好,例如。

var dummy = new Date().getTime();
$.get("home.html" + dummy, function(data) {
   $(".islice").html(data);
});

答案 5 :(得分:4)

我发现这种解决方法有效:

$.ajax("loaded.html", {
    cache: false,
    success: function(data, textStatus, jqXHR) {
        $("#content-1").html(data);
    },
    dataType:"html"
});

其中:

  • “loaded.html”是要加载的文件的URL。
  • $(“#content-1”)是包含已加载数据(和脚本)的元素。

答案 6 :(得分:3)

我在使用IE9时遇到了同样的问题。

默认情况下,所有ajax请求都以静默方式死亡。通过使用http://api.jquery.com/ajaxError/,我可以通过记录异常消息来确定错误类型:代码 c00ce56e 时出错。

事实证明,这意味着响应未被传递 utf-8编码,因为它应该响应ajax请求。

原来我在header('Content-type: text/html; charset=utf-8');

中输入了错误

答案 7 :(得分:3)

我认为问题的出现是因为模糊的编码。尝试显式指定响应编码(即HTTP标头中的字符集),如:

<meta charset="utf-8">

答案 8 :(得分:2)

e.preventDefault()在IE中不会有任何区别 - 您必须使用return false;来阻止事情发生:

$("#home").click(function(e) {
    $(".tabs").attr("src","tabs-home.gif");
    $(".islice").hide('fast');
    $(".islice").load("home.html");
    $(".islice").show('fast');  
    e.preventDefault();
    return false;
});

要详细调试,请查看Firebug

答案 9 :(得分:2)

好的伙计......我和8岁以上的人有同样的问题。这是我的解决方案,希望它对某人有所帮助:

1)首先,在IE中调试ajax非常困难。为什么?控制台没有达到标准,但还有另一个更大的问题 - 缓存。第一次加载错误时它会保留在缓存中。比你花2小时修复问题看到相同的结果(第1次这样做)。感谢这篇文章(和讨论):http://zacster.blogspot.cz/2008/10/jquery-ie7-load-url-problem.html我自定义了我的ajax调用:

$(container).load(link +'?random ='+ Math.random()* 99999 +'。postt-list li',function(){   //做一些事情 }

随机网址效果很好

2)@Neno是对的! IE有HTML错误的问题。验证您的加载HTML http://validator.w3.org/

答案 10 :(得分:1)

为了防止对IE进行窃听,请向其添加math.random()参数,以便不使用此不相关的缓存...

答案 11 :(得分:1)

我遇到了类似的问题,并且能够以这种方式工作:

.load().html()在IE中效果不佳;特别是如果你没有有效的HTML。

$("#home").click(function(e) {
    $(".tabs").attr("src","tabs-home.gif");
    $(".islice").hide('fast');
    $.ajax({
        url: "home.html",
        success: function(data, textStatus, xhr) {
            $(".islice")[0].innerHTML = data;
        }
    });
    $(".islice").show('fast');  
    e.preventDefault();
});

答案 12 :(得分:0)

.load()进入了<table>

嗯...也许将.islice班级提升到一个级别,进入<td>,或者推动<div>之间......

(不一定是那个问题,但这是可能的......)

答案 13 :(得分:0)

我有同样的问题,因为我的工作添加了头

<meta http-equiv="X-UA-Compatible" content="IE=EDGE" />

答案 14 :(得分:-4)

如果使用PHP加载,请重置数组值。例如:

$result = ''; // do this
$row = ''; // do this
$data = ''; // IMPORTANT Kills odd behavior CACHE FOR IE

$result = mysql_query("your sql here");
while ($row = mysql_fetch_array($result)){          
$data[] = $row ..... blah blah blah...