0

私は(基本的に)このコードを持っています-

<script type="text/javascript" language="javascript">
    $(document).ready(function() {
        $("#loadDiv").load("mypage.html", function(){ alert($("#someText").text()) });
    });
</script>
<div id="loadDiv"></div>

ただし、html がまだ div にレンダリングされていないため、アラートには「未定義」と表示されます。

私はこの質問を見てきました-コールバック関数を実行する前にjQueryのロード関数がロードされたコンテンツをレンダリングするのを待つ方法-Jakeの答えは私の状況に最適です. 私の実際のページには、これらのうちの 8 つがあり、2 秒の遅延で、html がレンダリングされる前にそれらのいくつかがまだ実行されています。

愚かな時間まで遅延を増やすよりも良い提案はありますか?

4

3 に答える 3

1

setTimeout()コードをのタイムアウトでコールバックにラップできるはずです0(ブラウザーはマイクロ秒でクランプするように設計されています4が、すべてのブラウザーがそうするわけではありません)。

これにより、コードがイベント キューにプッシュされ、コードが実行される前にブラウザーにレンダリングする機会が与えられます。

于 2012-06-26T11:21:51.853 に答える
1

documentationによると、loadメソッドは、関数を呼び出す前に、コンテンツが要素に配置されるのを既に待機しています。

「「完全な」コールバックが提供されている場合、後処理と HTML 挿入が実行された後に実行されます。」

これをテストしたところ、コールバック関数の実行時に要素に読み込まれたコンテンツが見つかりました。

コードで機能しない場合は、質問で示した以外のことをしようとしています。

于 2012-06-26T11:47:43.213 に答える
0

htmlを空に設定できます(リクエストの読み込み中にdivに他のhtml要素がない場合)。成功(完全なイベント)の後、コンテンツをロードします(応答がhtmlなのかテキストなのかわかりません。コードに従って例を実行しました)。リクエストが失敗した場合は、事前に定義されたテキストを設定することもできます。

jquery \ loadの詳細については、このリンクも確認してください。ただし、これは機能するはずです。

$("#loadDiv").load("mypage.html", function(response, status, xhr) {
  if (status == "success") {
    $("#loadDiv").html("");
  }
  else if(status == "complete"){
          $("#loadDiv").text();
   }
});
于 2012-06-26T11:28:51.160 に答える