0

私のjavascript(技術的にはtypescript)コードに次の行があります:

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 関数に知らせる方法はありますか?

4

1 に答える 1