IE で JavaScript プログラムを実行すると、永遠にループします。
Firefox、Safari、Chrome で動作します。
Stackoverflow にも同様の質問がありますが、ここでは埋め込み関数の関数名を削除することを提案しました。私はそれに名前を持っていません。
以下は、非同期の httprequest を設定する関数の抜粋です。「rq」は、open() が既に呼び出されているが、send() が呼び出されていない要求オブジェクトです。
応答関数を設定しようとしています。関数が同じ this ポインター (呼び出し関数と同じオブジェクトのメンバーでもある) を持つように、「self」var を使用しています。
var self = this;
rq.onreadystatechange = function()
{
self._reqStateChange(rq); // *
} // *
this._req[sl]=rq;
rq.send(null);
return true;
IE は // * でマークされた 2 行をエンドレス ループし、組み込み関数の最初のリターンでもあります。
this._reqStateChange = function(rq)
{
if( (!rq) || rq.readyState!=4 )
return; // exits here every time.
IE 9.0、組み込みデバッガーを使用。
jQueryやその他のライブラリは配置されていません。
何も思いつきません。助けてくれてありがとう。ここでロジックを理解したいのですが...
ノート:
自己構築が間違っているかどうかを確認するために、小さなスクリプトを作成しました。それはうまくいきます。onreadystatechange 関数に関連しているようです。終了するたびに、すぐに再度呼び出されます。
このコードは IE でロックアップしません:
someObject = function()
{
this.callback = function(){}
this.funcCallsCallback = function()
{
// call the callback
this.callback();
};
}
muell = new function()
{
this.value = 42;
this.test = function()
{
var rq = new someObject();
var self = this;
rq.callback = function()
{
self.endFunc();
}
// now:
rq.funcCallsCallback();
};
this.endFunc = function()
{
alert("called! value="+this.value.toString());
};
}
muell.test();