"停止运行此脚本" - 用于大型AJAX请求的IE

Ale*_*ril 7 ajax jquery internet-explorer

我正在使用jQuery.getJSON(...)为稍大的数据集进行调用/进程响应.预计响应时间为几秒钟(有一个动画加载图形来安抚用户).

总而言之,加载图形,响应,进程等在所有浏览器中都能正常工作.但是,在Internet Explorer(6/7/8)中,出现"停止运行此脚本"错误.如果允许继续,则脚本完成且没有问题.

$(document).ready(function() {
    $("#tree").treeview({ collapsed: true, animated: "slow" });
    $("#tree").hide();

    $("#loadingGraphic").fadeIn("slow");

    $.getJSON("mygenerichandler.ashx", function(data) {
        //manipulate data and add to treeview

        $("#loadingGraphic").fadeOut("slow", function() {
            $("#tree").slideDown("slow");
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

我意识到这个Internet Explorer有一个可以通过Windows注册表设置的首选项,但是,我很好奇其他开发人员如何在AJAX请求中处理预期的大或慢响应.

Mic*_*man 5

我的猜测是,它不是数据的加载,也不是您在代码中所做的数据处理。我认为这是通过HTTP接收到的JSON数据到Javascript对象的转换。

IE基本上执行eval()从字符串数据构建哈希。对于长字符串,这是非常非常低效的。我怀疑背后有一个Schlemiel Painter算法。我在一两年前遇到了完全相同的事情,并通过从JSON字符串中删除未使用或冗余的数据来解决了这一问题。

如果无法通过删除元素来缩短字符串,则可以尝试将服务器上的字符串分解成多个组件对象(如果可以话,称为“页面”),然后逐个获取它们。这样,您不必为长字符串支付低效的处理税,而不必处理多个短字符串。


Che*_*try 4

缓慢的脚本通知很可能不是针对实际的请求,而是针对您正在运行的用于处理请求收到的数据的脚本。这也可能是解析 JSON 的 jQuery 代码。

如果您发布“操作数据”的脚本(即代码片段中的注释部分),我们也许可以帮助优化它。

[编辑]你是对的。您应该考虑树的延迟加载。通常有多少个根节点?您可能会运气好,摆脱appendTo()循环。要么一次性构建整个 HTML 并进行大量操作appendTo(),要么使用未附加到 DOM 的中间 div 来累积节点,然后附加到主#tree元素。

var tempDiv = $('<div></div>');
for (var i in data) {
    tempDiv.append($(buildHierarchy(data[i]));
}
$("#tree").append(tempDiv);
$("#tree").treeview({ add: tempDiv }); //don't know if this works? Maybe tempDiv.children() ?
Run Code Online (Sandbox Code Playgroud)