私のサイトはjquery.load()
、ページの大部分でナビゲーションを行うために使用していました。ロードされたコンテンツの特定の部分のみを含める機能に本当に感謝しています。ここでは id="content" の div です。
$(frame_selector).load(url +" #content", function(response, status, xhr) {...});
しかし今、動的に読み込まれるページの一部であるスクリプトを実行できる必要があります。 Jquery.load()
これらのスクリプトは削除されますが、削除されjquery.ajax()
ません。jquery.load
そのため、ajax 呼び出しでの部分コンテンツ機能を次のように複製しました。
$.ajax({
url: url,
dataType: 'html',
success: function(data, textStatus, XMLHttpRequest) {
// Only include the response within the #content id element.
$(frame_selector).html( jQuery("<div>")
.append(data)
.find("#content")
);
}
});
問題は、ajax 呼び出しから動的にロードされるスクリプトが確実に実行されないことです。おそらく実行が早すぎるために、効果がないように見えることがあります。スクリプトは、jquery で DOM 操作を行っているだけです。画像やフラッシュなど、まだ読み込まれていないものには依存していません。行き詰まらないようにするために、私は物事を機能させるためのこの恐ろしいハックを持っています。以下を使用するだけの AJAX ロード スクリプトの代わりに:
$(document).ready( function() {...} ); // unreliable
実行する前にスクリプトを 200 ミリ秒遅らせます。
$(document).ready( window.setTimeout( function() {...}, 200 )); // HATE THIS
遅延をハードコーディングせずにこれを確実に機能させる方法を知っている人はいますか? <script>
新しい divにロードするロジックとの間の競合状態だと思います#content
が、どうすればよいかわかりません。