【问题标题】:jQuery's .load() not working in IE - but fine in Firefox, Chrome and SafarijQuery 的 .load() 在 IE 中不起作用 - 但在 Firefox、Chrome 和 Safari 中很好
【发布时间】:2010-11-06 21:16:25
【问题描述】:

我正用头撞墙……

我有以下代码:

$("#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查看现场直播

【问题讨论】:

  • 我也有同样的问题。没有任何效果,我已经尝试了以下所有建议的解决方案。 :( 我被卡住并放弃了。
  • 另一种尝试是在使用$.ajax() 加载内容后设置DOM 的innerHTML 作为替代方案。

标签: internet-explorer jquery


【解决方案1】:

我也有同样的问题。我发现的许多网站都建议 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 了解更多信息。

【讨论】:

  • 最好附加一个时间戳,所以$('.islice').load('home.html' + new Date().getTime());
  • S.Kiers 和 EMMERICH:你救了我的命。我试图弄清楚为什么 **** IE 没有使用浏览器的后退按钮加载我的初始起始页(我使用 Hash-tags 进行了一些 AJAX 加载),并且所有其他站点都可以正常工作。添加随机(或更好的时间戳)得出:DDD
  • 任何机会,如果这是答案,您可以将其标记为这样吗?我会很感激...
  • 应该是 $(".islice").load("home.html?" + new Date().getTime() );反而?我的意思是,缺少'?跟随 home.html
【解决方案2】:

$.ajaxSetup({ 缓存: false });

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 我的 URL 可以直接在 IE 中正常加载,但 $('#id').html(data) 不会显示任何内容。唉,也没有错误。
    【解决方案4】:

    我遇到了这个问题,整天摸不着头脑。不过最终找到了解决办法,并意识到什么是怪异的 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 很烂.. 没有别的了..

    【讨论】:

      【解决方案5】:

      我发现 .load() 函数在 IE 上不能很好地工作,但是使用 $.get() 却可以很好地工作,例如

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

      【讨论】:

      • 试过这个,确认提取是否正常工作很有用。唉 .html(data) 行默默地什么都不做。
      • 我想你在这里忘记了问号。 $.get("home.html?" + dummy, function(data) {...
      【解决方案6】:

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

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

      地点:

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

      【讨论】:

        【解决方案7】:

        我在 IE9 上遇到了同样的问题。

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

        事实证明,这意味着响应没有通过 utf-8 编码,因为它应该是响应 ajax 请求。

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

        【讨论】:

          【解决方案8】:

          我认为问题的发生是因为编码不明确。尝试显式指定响应编码(即 HTTP Header 中的字符集),例如:

          <meta charset="utf-8">
          

          【讨论】:

            【解决方案9】:

            好的,伙计们......我在 8 岁及以上的时候遇到了同样的问题。这是我的解决方案,希望对某人有所帮助:

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

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

            随机 URL 效果很好

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

            【讨论】:

            • 感谢您的提示。我被 IE 加载 ajax 调用卡住了。原来我有一个遗留的
              标记,导致 html 无法验证。将 math.random 添加到 url 负责 IE 缓存。再次感谢。
            【解决方案10】:

            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

            【讨论】:

            • -1 jQuery 扩展事件对象以使 e.preventDefault();跨浏览器。
            • docs.jquery.com/Events/jQuery.Event#event.preventDefault.28.29:阻止浏览器执行默认操作。使用方法 isDefaultPrevented 了解是否曾调用过此方法(在该事件对象上)。必要时修复 (IE)。
            • 我不知道他们已经更新它以与 IE 一起使用 - 我上次检查时没有。但是,添加 return false;应该仍然可以解决问题。
            【解决方案11】:

            为防止 IE 对此进行错误处理,请为其添加一个 math.random() 参数,这样它就不会使用这个不相关的缓存...

            【讨论】:

              【解决方案12】:

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

              .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();
              });
              

              【讨论】:

                【解决方案13】:

                您是 .load() 转为 &lt;table&gt;

                嗯...也许将.islice 类提升一个级别,进入&lt;td&gt;,或者可能是介于两者之间的&lt;div&gt;...

                (这不一定是问题,但有可能......)

                【讨论】:

                • 这完全取决于他从服务器端返回的内容。如果结果只是表格行的集合,没有包装 标记,它将按原样正常工作。
                • @Tomas Lycken:我在回复之前检查过;他正在发回 div 或完整的表格。
                • @Tomas Lycken:事实上,我什至检查了脚本调试器:内容被添加到 table 标记中,但没有呈现到屏幕上。
                【解决方案14】:

                我有同样的问题,对我来说工作添加头

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

                【讨论】:

                  【解决方案15】:

                  如果使用 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...
                  

                  【讨论】:

                  • PHP 不维护状态(除非您直接访问 $_SESSION 或其他一些会话数据存储),即使这样做也不会影响 IE,因为 IE 不属于服务器上的 PHP 代码。
                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-05-03
                  • 2011-08-03
                  • 2017-04-15
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多