0

私は3つの部分的なビューを持っています

ビュー 1:

//_yard.cshtml
@model Yard
<div>@Model.Name</div>
<div class="yard"></div>

@foreach(var house in Model.Houses)
{
  <script  type="text/javascript">
  $(document).ready(function{
   $(".yard").load("/community/Houses");
  });
  </script>
}

ビュー 2

//_houses.cshtml
@model House
<div>@Model.Name<div>
<div class="house"></div>
@foreach(var level in Model.levels)
{
  <script  type="text/JavaScript">
  $(document).ready(function{
    $(".house").load("/Community/Levels");
  });
  </script>
}

ビュー 3:

//_levels.cshtml
@model Level
<div>@Model.Name<div>
<div class="room"></div>
@foreach(var room in Model.Rooms)
{
  <script  type="text/JavaScript">
  $(document).ready(function{
    $(".room").load("/Community/Rooms");
  });
  </script>
}

上記のサンプルは、 をView 1使用して別のビュー内にa をロードしjQuery Load()、次にView 2withingをロードすることを示していView 1ますが、最初の load() は正常に動作しますが、後続のロードは起動しません。

機能がリセットされていないことが原因だと思いますが$(document).ready();、ロードごとにリセットする方法がわかりません。

MVC で解決 された問題 デフォルトのテンプレートは、ページの下部に jQuery スクリプトをレンダリングします。それを一番上に移動すると、ajax の読み込みが機能しました。

これは意味がないことはわかっていますが、問題は解決しました。これで問題が解決する理由についてもう少し調査した後、質問を更新します。

4

1 に答える 1

2

編集: 以下の回答は一般的に役に立ちますが、本当の問題は JavaScript の構文エラーだと思います。.load()すべてのコード行の最後に 1 つ多すぎます)。それを修正し、ブラウザの JavaScript コンソールをチェックして、これ以上構文エラーがないことを確認してから、以下のアドバイスも使用してください :-)

$(document).ready();「リセット」することを考えるのは役に立ちません。

これは、DOM が完全にロードされ、JavaScript による操作の準備が整ったときに発生するイベントです。このイベントは、Web ページが初めて読み込まれたときに 1 回だけ発生します。以降の AJAX リクエストでは$(document).ready();、ページで新しいイベントは発生しません。ただし、他のイベントは発生しますが、発生しません$(document).ready();

$(document).ready();ビュー 2 と 3 から削除すると、コードが機能します。(ヒント: JavaScript を<script>タグでラップする必要があります。そうしないと、一部のブラウザーで奇妙な動作が発生する可能性があります)。

AJAX リクエストが終了したときに発生するイベントが役立つ場合があります。

  • $.ajax();success//ハンドラがありerrorます。complete
  • .load();completeハンドラーを持っています。
于 2013-02-22T08:48:45.713 に答える