【发布时间】:2014-02-24 19:27:06
【问题描述】:
我有一个 ASP MVC 应用程序,它允许用户使用 jQuery ajax 调用将多个部分视图添加到 div。
jQuery("#AddNew").click(function () {
$.ajax({
url: this.href,
cache: false,
success: function (html) {
jQuery("#DivId").append(html);
}
});
return false;
});
问题在于,由于必须授权用户执行返回部分视图的操作,因此当用户的会话超时时,它会呈现登录页面而不是部分视图。我有多个地方都在使用类似的 ajax 调用,因此我将以下内容添加为全局 ajaxSuccess 事件:
jQuery(document).ajaxSuccess(function (event, request, settings) {
var isLogin = jQuery(request.responseText).find('.login-form').length;
if (isLogin > 0) {
var url = document.URL;
var rootPath = '@Request.Url.GetLeftPart(UriPartial.Authority)';
var path = url.replace(rootPath, '');
var pathEncoded = encodeURIComponent(path);
var loginURL = rootPath + "/Account/Login?returnUrl=" + pathEncoded;
location.href = loginURL;
}
});
这很有效,因为它会在发出未经授权的 ajax 请求时将用户重定向到登录页面。但是,它仍然在将 html 添加到 div 中,在重定向前一小段时间可见。
有没有办法让全局事件在本地事件之前触发? jQuery API 表明本地成功事件是在全局 ajaxSuccess 事件之前触发的,所以我尝试将 ajax 调用更改为使用完成,而不是成功。这确实有效,但似乎如果由于某些原因我需要在将来添加仅在成功时执行的代码,我会遇到同样的问题。有没有更好的方法来处理这个问题?
【问题讨论】:
标签: javascript jquery asp.net ajax asp.net-mvc