如何在显示 mvc 视图之前“预处理”ajax 调用
本文关键字:预处理 ajax 调用 显示 mvc 视图 | 更新日期: 2023-09-27 18:31:16
我对ajax不是那么专业,所以我发现很难找到更好的答案。我尝试创建单独的".js"文件,其中包含对休息服务的调用(用于验证用户会话),但它不起作用。
我的目标是在加载视图(在 MVC 中)之前验证用户会话。使用验证给定数据库会话的逻辑的唯一方法是使用 ajax 通过 url 调用 rest 服务。
此代码运行良好(在主视图中):
<script type="text/javascript">
$(function () {
$.get('@Url.Action("GetSession", "Auth")', function (getdata) {
if (getdata.UserID && getdata.SessionID && getdata.SourceIP) {
$.post('http://website.com/Rest/Authenticate/ValidateUserSession', JSON.stringify(getdata), function (response) {
if (response == false) { window.location.replace('@Url.Action("SignUp", "Auth")'); }
});
} else {
window.location.replace('@Url.Action("SignUp", "Auth")');
}
});
});
</script>
<h2>
Home</h2>
@*The content here should not appear, unless session is validated.*@
唯一的问题是,验证过程需要 3 到 5 秒,因此无论验证是否成功,用户都会在 ajax 调用返回结果之前看到主页。如果验证/响应返回false
它将重定向到 sigup 页面。
我不知道这个过程的最佳实践是什么。目前,我只是不希望向用户显示主视图,除非会话经过验证。希望我能解释得很好。如果您有更好的主意,请提出建议。
附加信息:
如果可能的话,我喜欢这样做:
<script type="text/javascript">
if(!validated()){
window.location.replace('@Url.Action("SignUp", "Auth")');
}
</script>
<h2>
Home</h2>
@*The content here should not appear, unless session is validated.*@
- 为什么不能在服务器端使用其余服务?从技术上讲,没有理由不能这样做。这里有一个教程来讨论这一点: http://codebetter.com/johnvpetersen/2012/03/22/accessing-a-asp-net-webapi-rest-service-from-asp-net-mvc/
这应该照顾好一切。如果由于某种原因您无法做到这一点,那么您可以执行以下操作,
-
将主页设置为局部视图。
-
不要加载主页,而是加载带有处理图标(或要显示的任何消息)的空页面。
-
与 REST 服务通信,如果得到回复,则使用 JQuery 加载主页的部分视图,否则加载注册部分视图。
以下是一篇讨论如何使用 JQuery 加载 MVC 分部视图的文章: http://www.codeproject.com/Articles/34221/JQuery-Partial-Views-in-ASP-NET-MVC