1

300 ページ以上で $(selector).load(path) 関数を使用するサイトがあります。現在、クライアントの要件が変更されており、これらのページを呼び出すためにクロス ドメインにアクセスする必要があります。

そのために、YQL を使用して、すべての .load( 関数をクロスドメイン関数に置き換える必要があります。

.load 関数をオーバーライドしてデフォルトを防止し、独自のコードを実行することは可能ですか?

4

3 に答える 3

6

特に$.fn.load引数に応じて異なることを行い、それを置き換えるとそれらすべてのサブ関数に影響するため、これを行う明確な方法はありません。

ただし、jQueryは AJAX フックをサポートしており、目的を達成できる可能性があります。

IE の XDomainRequest のサポートだけが必要な場合は、次のプラグインをご覧ください: https://github.com/jaubourg/ajaxHooks/blob/master/src/ajax/xdr.js


とにかく、本当に jQuery の ajax ロード機能を置き換えたい場合は、次のコードでそれを行う必要があります。

var _load = $.fn.load;
$.fn.load = function(url, params, callback) {
    if(typeof url !== "string") {
        return _load.apply(this, arguments);
    }

    // do your ajax stuff here
}

これは、誰かがイベントをバインドするかonload、AJAX ロードを実行するかを決定するために jQuery が使用するチェックとまったく同じです。

于 2012-06-22T09:47:39.513 に答える
4

最も合理的な方法は、jquery 関数をオーバーロードせず、単にお気に入りのエディターで検索と置換を行い$(xxx).load(yourpackage.load(xxx,.

これは、300 個の js ファイルでも数分で実行できます。リーダーは jquery 関数が doc にないことをすることを決して期待しないので、将来の変更はより簡単になり、コードはより読みやすくなります。

于 2012-06-22T09:50:35.147 に答える
2

はい、可能です:

$.fn.load = yourFunc;

おすすめですか?ないと思います。

于 2012-06-22T09:46:50.507 に答える