获取ajax回调时可能导致Chrome崩溃的原因是什么?

时间:2013-06-06 16:07:35

标签: jquery ajax google-chrome bind ecmascript-5

我的javascript(技术类型脚本)代码中包含以下行:

debug.print("send ajax call : "+file);
jQuery.get('img/' + file + '.txt', this.ProcessFileData.bind(this)); // 'bind' should force the callback to remember its object - part of ECMAScript 5
debug.print("ajax call sent : " + file);

(调试函数是我自己的,它只是写入窗口中的文本框,但它允许我看到Chrome到目前为止没有崩溃。)但ProcessFileData()开头的调试行永远不会得到在Chrome(版本27.0.1453.110)中达成,即使它在IE,Firefox和Safari中运行良好。 Chrome没有出现错误窗口,但是标签变得没有响应 - 我无法启动开发人员工具,或者选择页面上的文本等(虽然我可以切换到其他标签)。更重要的是,在ProcessFileData函数中存在一些差异的代码的先前版本,但显然在调试消息的位置之后,在Chrome中也可以正常工作。

用以下任一项替换中间行:

jQuery.get('img/' + file + '.txt', this.ProcessFileData);
jQuery.get('img/' + file + '.txt', function () { debug.print("check"); });

阻止Chrome崩溃(虽然这意味着程序的其余部分停止按预期工作),所以它似乎必然是导致问题的“绑定”方法 - 即使这已经成为我项目的一部分6个月(如果没有它,我无法让回调正常工作)这个问题仅在几个星期前出现。 我正在使用ddr-ecma5库与旧版浏览器兼容,但我尝试将其取出后没有任何效果。

有人知道回调中的bind方法是如何导致崩溃的,以及我如何解决这个问题?有什么方法可以避免使用bind方法(解决问题)并仍让ProcessFileData函数知道正在返回哪个文件?

1 个答案:

答案 0 :(得分:0)

我完全不知道为什么你的电话会失败 - 听起来你的代码中有一个无限循环。

要避免使用bind,请将外部this保存在其他变量中,并在匿名函数中调用ProcessFileData

var that = this;
jQuery.get('img/' + file + '.txt', function(e) {
    that.ProcessFileData(e);
});