【问题标题】:Internet Explorer 11 executes ajax success condition but then freezesInternet Explorer 11 执行 ajax 成功条件但随后冻结
【发布时间】:2014-09-19 04:21:35
【问题描述】:

Internet Explorer 11 似乎成功执行了我的 ajax 调用。它在success 条件下运行代码一直到该块中的最后一行,更新HTML DOM 结构,但之后冻结。 我在 IE 中遇到的错误是:“由于脚本长时间运行而没有响应”。

我的代码适用于 Chrome、Firefox 和 Safari!

当用户点击分页链接时,我如何调用函数loadContentviaAjax:

$(document).on('click', '.pagination-top a', function () {
    //CODE      
    loadContentviaAjax($(this).attr('href'), rawNewURL);
    console.log('20');
    return false;
});

这是companysearch.js 中涉及的部分代码块:

function loadContentviaAjax(furl, rawNewURL) {
    var webserviceURL = rawNewURL;
    $.ajax({
        type: "GET",
        url: webserviceURL,
        data: "",
        cache: false,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        error: function () {
            $("#loadstatus").html($("#whoops").attr('data-message')).addClass('box_error');
        },
        success: function (data) {
            console.log('0');

            //MORE OF MY CODE

            console.log('18'); //<-- this line is still logged
        } 
    });                 
return false
}

我试过了: - 注释掉我的 AJAX 调用的 success 块中的所有代码 - 尝试在 IE 开发者工具中设置断点

但我无法将其缩小到导致此问题的行。

线

console.log('20');

也被击中,所以 IE 在那之后冻结,但除了 loadContentviaAjax 我无法缩小导致冻结的原因....请帮助!

【问题讨论】:

  • 19 应该在 0 和 10 之前记录
  • @epascarello:啊,当然,你是对的 :) 但是,我现在进入了代码,但我的脚本在完成 success 块后立即冻结了 IE。有什么想法吗?
  • 如果注释掉块中的代码,它会冻结吗?它会触发任何其他异步进程吗?是什么触发了 Ajax 调用?
  • 是的,即使我将所有内容都注释掉,它也会冻结。我现在认为这与我之前发布的一个问题有关:stackoverflow.com/questions/25873953/… 我现在还注意到 success 块内的日志记录仅在将调用的 web 服务的内容类型设置为 text/plain 时才执行,这是不可取的。那里有什么建议吗? :)
  • JSON 有多大? JSON 有效吗?

标签: javascript ajax internet-explorer-11 freeze


【解决方案1】:

好的!我找到了导致 IE11 挂起的一段代码。我不太确定你将如何解决它,但我想你会想知道的。

在单击链接之前设置 js 调试器,然后暂停执行显示 javascript 将所有时间都花在 http://pagead2.googlesyndication.com/pagead/osd.js 中。所以你的代码与它关系不大。

单步执行表明 Google 的代码不知何故陷入了从函数 a 到 b 再到 c 再到函数 a 的无限循环。它大部分时间都在 catch 块中,用于在没有父级的 iframe 上调用 getBoundingClientRect(抛出未指定的错误)。

当我阻止 http://pagead2.googlesyndication.com/pagead/osd.js 使用 Fiddler 下载时,您的导航工作正常。

我希望我能告诉你“改变这个或那个,它会起作用”,但我找不到它 - 缩小的 Google 代码很难调试。您的代码是否有可能以某种方式使 google ads 容器成为孤儿?

【讨论】:

  • 我想补充一下您的答案。如果可能的话,请使用闭包并在本地分配您的变量,也许您的代码中的某些内容在全局命名空间中发生冲突,从而导致上述行为。 ..只是一个想法。
  • 好的,谢谢,我会调查的。只是一个问题,因为我从不使用 IE 进行调试,你介意发布你设置 js 调试器的步骤吗?那么您观看了哪些代码行等?谢谢,我会尽快回复:)
  • 啊啊啊。 IE的魔力。步骤: - 1) 打开 IE - 2) 按 F12(菜单 - 工具 - F12 开发人员工具也可以) - 3) 按左侧的小错误图片 文件夹图标打开脚本列表。单击链接后只需按暂停按钮即可查看发生了什么。
  • IE因为是M$所以有一点红利。这个问题对谷歌脚本没有帮助,但是是的.. msdn.microsoft.com/en-us/library/7seh8d72.aspx
  • @MennovandenHeuvel:就是这样!我的 javascript 正在替换 Google AdSense 脚本标签。当我将这个脚本移到 div 之外时,我正在通过 javascript 进行更改,一切都好起来了!我会尽可能奖励赏金:)
猜你喜欢
  • 1970-01-01
  • 2013-01-15
  • 2012-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-11
相关资源
最近更新 更多