我的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 到目前为止还没有崩溃。)但是在 Chrome 中永远不会到达 ProcessFileData() 开头的调试行(版本 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 方法(它解决了问题)并且仍然让 ProcessFileData 函数知道正在返回哪个文件?