JavaScript 弹出窗口阻止程序和 Ajax 回调 - C# MVC 应用程序
javascript popup blocker and ajax callback - C# MVC app
在
将表单发布到 url 的安全网站中,有 2 个要求:
- 如果身份验证票证仍然有效,则表单将发布到新窗口,否则同一窗口会将用户重定向到登录页面。
- 将表单发布到新窗口不会调用弹出窗口阻止程序。
我已经编写了一个 ajax 操作来获得有关身份验证是否仍然有效的正确答案。 但是我无法让重定向代码进入脚本执行上下文之外,从而避免弹出窗口阻止程序。请帮忙!
JavaScript:
$('#someSystem').click(function () {
//deferred promise?
auth().done(function (result) {
//need to move below code outside this callback without side effects
if (result == 'true') {
var form = $('#ssoForm');
form.submit();
}
else {
window.location.href = "/account/login";
}
});
return false;
});
function auth() {
return $.ajax({ url: '/account/isauthenticated', method: "POST" });
}
已通过身份验证的用户的 HTML
<form action="/sso/somesystem" id="ssoForm" method="post" target="_blank">
...
<div id="someSystem">Continue</div>
</form>
我不相信除了调整弹出窗口块来避免它之外,您将无法做任何事情。如果js可以做到这一点,它几乎会完全破坏阻止程序的目的。此外,您还应该考虑在js中进行重定向的安全性,因为代码在用户空间中。 用户可以从其浏览器取消重定向。
相反,为什么不在服务器上进行检查并使用
RedirectToAction()
在阅读了几篇jQuery帖子甚至signalR之后,这篇 codeproject.com 的文章对我的情况最有帮助。似乎有一种更简单的方法来解决这个问题。开发人员不知道身份验证在给定时间是否有效,但肯定知道它会过期多长时间。这些知识可以用JavaScript硬编码,并且可以先发制人地(setTimeout
)向用户发送警报,而不是等待他们点击然后尝试找出答案。这种方法不会让我打扰弹出窗口阻止程序。
相关文章:
- 从AJAX回调函数中分离数据
- 如何从ajax成功回调函数中读取javascript变量
- 如何处理Ajax.BeginForm()OnError OnFailure回调
- 在AJAX中使用window.location.replace'成功'回调
- AJAX之前的Dojo回调
- 如何在ajax回调中使用类变量
- AJAX成功回调-执行javascript时出现问题
- 当使用命名函数作为jquery ajax成功回调时,我需要括号吗
- jQuery AJAX错误回调未运行
- 使用Javascript通过ajax回调更新DOM
- 在Ajax中难以在JavaScript中使用回调
- 在firefox中,使用jquery ajax不会调用错误和完整回调
- Backbone,Coffescript-在AJAX中将函数作为回调传递
- php执行后的Ajax回调
- AJAX 回调在 Firefox 中失败
- $.mobile.changePage 之后的回调函数通过 AJAX 加载
- 从类方法中的 ajax post 函数回调函数更改 javascript 类属性
- 需要Javascript回调ajax解释
- web服务正在调用错误回调(ajax)
- 选择initselection回调ajax -不加载默认值