0

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();
4

0 に答える 0