部分视图和 jQuery
Partial Views and jQuery
我有这样一个布局页面(简化代码)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>@Resources.LayoutPageTitle | @ViewBag.Title</title>
[...other code omitted...]
</head>
<body id="page-top">
@Html.Partial( "_LandingNavbar" )
[...other code omitted...]
<!-- Placed at the end of the document so the pages load faster -->
<!-- jQuery -->
<script src="~/assets/js/jquery/jquery-2.1.3.min.js"></script>
@RenderSection( "scripts", required: false )
</body>
</html>
如您所见,我在加载 jQuery 脚本之前加载了局部视图。在我的部分视图中,代码如下
<div class="dropdown profile-element">
<span class="text-center" id="userInfo"></span>
</div>
<script type="text/javascript">
$(document).ready(function () {
$.ajax({
type: "POST",
url: '/GetUserInfo',
data: {},
dataType: 'json',
success: function (data) {
alert(data);
}
});
});
</script>
但我得到
ReferenceError: $ is not defined
https://localhost:44301/
Line 237
据推测,当 jQuery 脚本执行时,jQuery 仍未加载。但是 $(document).ready(function ()
指令不应该保证这一点吗?
这是试图将函数连接到 $(document).ready 事件导致错误的行为。即使您不打算在页面加载之前执行该函数,jQuery 构造函数在 jQuery import
之前仍然是 运行
$(document).ready(function(){}) // use jquery to find the document object, then wire up this function to the ready event
<script src="~/assets/js/jquery/jquery-2.1.3.min.js"></script> // go ahead and import jquery
$(document).ready()
仅在加载 JQ 时有效,因为它本身是一个 Jquery 函数。
如果您改用 DOMContentLoaded 事件会怎样?
document.addEventListener('DOMContentLoaded', function() {
// Your code
});
实际上您在 jquery 之前加载局部视图。所以首先它会尝试执行 $(document) 然后你会得到 $ is not defined。试试这个
<head>
//[...other code omitted...]
<!-- jQuery -->
<script src="~/assets/js/jquery/jquery-2.1.3.min.js"></script>
</head>
<body id="page-top">
@Html.Partial( "_LandingNavbar" )
[...other code omitted...]
<!-- Placed at the end of the document so the pages load faster -->
@RenderSection( "scripts", required: false )
</body>
我有这样一个布局页面(简化代码)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>@Resources.LayoutPageTitle | @ViewBag.Title</title>
[...other code omitted...]
</head>
<body id="page-top">
@Html.Partial( "_LandingNavbar" )
[...other code omitted...]
<!-- Placed at the end of the document so the pages load faster -->
<!-- jQuery -->
<script src="~/assets/js/jquery/jquery-2.1.3.min.js"></script>
@RenderSection( "scripts", required: false )
</body>
</html>
如您所见,我在加载 jQuery 脚本之前加载了局部视图。在我的部分视图中,代码如下
<div class="dropdown profile-element">
<span class="text-center" id="userInfo"></span>
</div>
<script type="text/javascript">
$(document).ready(function () {
$.ajax({
type: "POST",
url: '/GetUserInfo',
data: {},
dataType: 'json',
success: function (data) {
alert(data);
}
});
});
</script>
但我得到
ReferenceError: $ is not defined
https://localhost:44301/ Line 237
据推测,当 jQuery 脚本执行时,jQuery 仍未加载。但是 $(document).ready(function ()
指令不应该保证这一点吗?
这是试图将函数连接到 $(document).ready 事件导致错误的行为。即使您不打算在页面加载之前执行该函数,jQuery 构造函数在 jQuery import
之前仍然是 运行$(document).ready(function(){}) // use jquery to find the document object, then wire up this function to the ready event
<script src="~/assets/js/jquery/jquery-2.1.3.min.js"></script> // go ahead and import jquery
$(document).ready()
仅在加载 JQ 时有效,因为它本身是一个 Jquery 函数。
如果您改用 DOMContentLoaded 事件会怎样?
document.addEventListener('DOMContentLoaded', function() {
// Your code
});
实际上您在 jquery 之前加载局部视图。所以首先它会尝试执行 $(document) 然后你会得到 $ is not defined。试试这个
<head>
//[...other code omitted...]
<!-- jQuery -->
<script src="~/assets/js/jquery/jquery-2.1.3.min.js"></script>
</head>
<body id="page-top">
@Html.Partial( "_LandingNavbar" )
[...other code omitted...]
<!-- Placed at the end of the document so the pages load faster -->
@RenderSection( "scripts", required: false )
</body>