0

に組み込まれた機能を必要とする問題と解決策がありましたmootools。それで私はそれを解剖し始めました。IframeShim.destroy このような機能に興味があります

destroy: function(){
        if (this.shim) this.shim.destroy();
        return this;
    }

今、私がこれで理解できないことは何ですかshim。特に私が理解しようとしているのは Request.JSONP.cancel 、そのコードがこのようなものであるということです

cancel: function(){
        if (this.running) this.clear().fireEvent('cancel');
        return this;
    }

これclearで、コードが次のような呼び出しがキャンセルされます

clear: function(){
        this.running = false;
        if (this.script){
            this.script.destroy();
            this.script = null;
        }
        return this;
    }

今、この明確な関数で、私はdestroy()どちらが私を連れて行きshim(上部のコードを参照)、行き詰まっているのかを見ることができます。これらの関数はすべてmootools-more.jsにあります

ヘルプ?

誰かが単純なjavascriptの実装を提供できれば素晴らしいと思います。代替手段Request.JSONP.cancel はありますか?JQuery

4

1 に答える 1

1

Request.JSONP.clearメソッドによって呼び出されているdestroyはそうではなくIframeShim.destory、mootoolsコアの一部です。ソースは次のとおりです。

destroy: function(){
    var children = clean(this).getElementsByTagName('*');
    Array.each(children, clean);
    Element.dispose(this);
    return null;
},

行うのは、DOMから要素を削除するElement.disposeネイティブjasvascriptDOMメソッドNode.removeChildを呼び出すことだけです。

したがって、JSONP.cancelが実行しているのは、スクリプトDOMノードがを介して追加されたかどうかを確認することだけですRequest.JSONP.cancel。そうであった場合は、removeChildを介してDOMからスクリプト要素を削除します。

重要なことは、runningフラグをfalseに設定することです。を見るとRequest.JSONP.success、コールバック関数を呼び出す前に最初に行うことは、runningフラグがfalseに設定されているかどうかを確認することです。設定されている場合は、すぐに戻ります。これにより、実行が効果的に「キャンセル」されます。

HTTPリクエストをキャンセルするつもりなら、答えはノーです。そうではありません。

于 2011-07-29T09:57:57.520 に答える