我有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
在另一个视图中加载jQuery Load()
,然后加载View 2
View 1
,然后依此类推, ,第一个load()工作正常,但subsequint加载不会触发。
我认为这是由于$(document).ready();
功能未被重置,但是,我不知道如何在每次加载时重置它。
解决了问题 使用MVC,默认模板在页面底部呈现jQuery脚本。我把它移到了顶部,ajax加载了。
我知道这没有意义,但它解决了这个问题。在进行一些调查之后,我会更新这个问题,为什么这样可以解决问题。
答案 0 :(得分:2)
修改强>
下面的答案通常很有帮助,但我认为真正的问题是JavaScript中的语法错误。 .load()
代码行最后都有一个)
。修复此问题,通过检查浏览器中的JavaScript控制台确保没有更多语法错误,然后使用以下建议: - )
考虑$(document).ready();
被“重置”是无益的,因为它不是也不能“重置”。
这是一个在DOM第一次完全加载并准备好被JavaScript操纵时触发的事件。当第一次加载网页时,事件只发生一次,并且只发生一次。任何后续的AJAX请求都不会在页面上触发新的$(document).ready();
事件。但是,它们会触发其他事件 - 但不是$(document).ready();
。
从视图2和3中删除$(document).ready();
,您的代码将正常运行。 (提示:您应该将JavaScript包装在<script>
标记中,否则在某些浏览器中可能会出现一些奇怪的行为。)
AJAX请求完成后触发的事件可能会帮助您:
$.ajax();
有success
/ error
/ complete
个处理程序。.load();
有一个complete
处理程序。