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请求中处理预期的大或慢响应.
我的猜测是,它不是数据的加载,也不是您在代码中所做的数据处理。我认为这是通过HTTP接收到的JSON数据到Javascript对象的转换。
IE基本上执行eval()从字符串数据构建哈希。对于长字符串,这是非常非常低效的。我怀疑背后有一个Schlemiel Painter算法。我在一两年前遇到了完全相同的事情,并通过从JSON字符串中删除未使用或冗余的数据来解决了这一问题。
如果无法通过删除元素来缩短字符串,则可以尝试将服务器上的字符串分解成多个组件对象(如果可以的话,称为“页面”),然后逐个获取它们。这样,您不必为长字符串支付低效的处理税,而不必处理多个短字符串。
缓慢的脚本通知很可能不是针对实际的请求,而是针对您正在运行的用于处理请求收到的数据的脚本。这也可能是解析 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)
| 归档时间: |
|
| 查看次数: |
13107 次 |
| 最近记录: |