0

現在、Jquery の .load() 関数を使用してページ フラグメントを非同期的に挿入しています。ページ フラグメントの読み込み元の URL で、JavaScript グローバル変数値も設定します (script タグ内)。

var loaded_variable = 'value1'

.load() 関数を使用してページ フラグメントを挿入しloaded_variable、次のコードのようにの値を取得する方法はありますか。

    function loadProducts(url) {
                 $('#mainplace').load(url + ' #submain', function() { 
                       current_variable = loaded_variable;
                 });
    }

セレクター式が URL に追加されるときにスクリプト ブロックが使用されることを認識しているため、.load() 関数が機能しない場合は、これを実行できる他の Jquery 関数を使用できます。

追加情報: 読み込み元の URL は HTML と Python (Web2py) で記述されています。同じ Python 変数を使用してページ フラグメントをレンダリングし、loaded_variable値を設定します。

4

2 に答える 2

1

ページからフラグメントをフェッチしてスクリプトを実行したい場合は、別のアプローチが必要になります。これは少しハックですが、機能します。

$.ajax({url: 'fetch_page.html', dataType: 'text'}).done(function(html) {
    var dom = $('<html />').prop('innerHTML', html);
    $('body').append(dom.find('body p'));
    $('head').append(dom.find('script'));
});

これにより、取得したページからタグが取得され、親ページの にp挿入されます。bodyまた、取得したページでスクリプトを実行します。

少し疑問に思っているprop('innerHTML...のは、jQuery の.html()メソッドを使用した場合、入力文字列がサニタイズされるため、必要な結果が得られないからです。

私が最初に考えたのはドキュメント フラグメントでしたが、ドキュメント フラグメントに HTML 文字列を挿入することはできません。DOM メソッドを介して追加する必要があります。それでも、この場合でも、単に要素を使用して dom () を解析するよりも、実際には節約できませんdom

私が言うように、少しハックですが、動作します。

于 2012-07-11T20:25:16.810 に答える