2013-02-22 153 views
0

我有3個局部視圖jQuery的.load().load()

視圖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> 
} 

將上述樣品,顯示了我加載使用jQuery Load()另一視圖內的View 1,我然後加載View 2 withing View 1,然後等等,然而,第一負載()工作正常,但subsequint負載不火。

我認爲這是由於$(document).ready();函數未被重置,但是,我不確定如何在每次加載時重置它。

問題解決 使用MVC默認模板在頁面底部呈現jQuery腳本。我把它移到頂端,並且ajax加載工作。

我知道這沒有意義,但它解決了這個問題。爲了解決這個問題,我會在做一些更多的調查之後更新這個問題。

+0

在附註中,純粹基於您在上面提供的示例,我認爲根本不使用JavaScript更有意義。當你執行你的@foreach時,我會把Html.RenderPartial()放在那裏,而不是JavaScript,並在服務器端生成整個HTML,而不是在服務器上加載部分頁面,然後從多個AJAX調用加載剩下的AJAX調用客戶端。 – 2013-02-22 09:08:42

+0

我必須使用ajax加載它,隨後從各種Web服務中提取數據,隨後的部分需要很長時間才能加載。 – 2013-02-22 09:32:38

回答

2

編輯: 下面的答案一般是有益的,但我認爲真正的問題是在你的JavaScript語法錯誤。代碼行​​最後都有一個太多的)。解決這個問題,請確保你沒有通過檢查你的瀏覽器的JavaScript控制檯擁有更多的語法錯誤,那麼也可以使用下面:-)

思考$(document).ready();被「復位」的建議是無益的,因爲它不是並且不能被「重置」。

這是一個事件,在第一次DOM被完全加載並準備好被JavaScript處理時被觸發。事件發生一次,並且只有一次,當第一次加載網頁時。任何後續的AJAX請求都不會在頁面上觸發新的$(document).ready();事件。但是,他們會發起其他事件 - 但不是$(document).ready();

從視圖2和3中刪除$(document).ready();,您的代碼將起作用。 (提示:您應該將您的JavaScript包裝在<script>標籤中,否則在某些瀏覽器中可能會出現一些奇怪的行爲)。

事件當AJAX請求完成後可以幫你出火:

  • $.ajax();success/error/complete處理程序。
  • .load();有一個complete處理程序。
+0

只是刪除'$(document).ready();'不會導致下一個加載執行。 ' 2013-02-22 09:40:08

+0

你也有一些語法錯誤。結尾,並且每個.load()行末尾有一個太多)。在瀏覽器中使用諸如JSLint或JavaScript控制檯之類的工具,以確保JavaScript有效。 – 2013-02-22 09:57:56