2009-11-09 28 views
0

我有这个问题,我的网站使用了很多ajax,当用户超时它们仍然在我的页面上。现在说用户离开10分钟(超时设置为10分钟),现在用户超时但仍在页面上。如何将某些内容传递给Ajax.jQuery

所以他们可以做一个“保存”的请求,但现在我所有的操作方法,ajax请求都会有一个asp.net mvc授权标签ontop。如果用户没有通过认证,那么他们应该被重定向到“登录页面”,但由于它是ajax请求,他们不会发送到“登录页面”,什么也不会发生。

所以我想也许我可以以某种方式回传给ajax.Complete(如果它们仍然通过身份验证),如果它是“false”,那么从javascript进行重定向。

但是我不知道该怎么做。我不知道如何传递回它,如何编写我的控制器方法。

回答

1

如果MVC产生401 Unathorized响应,那么应调用jQuery ajax调用的失败回调函数,并为您提供XmlHttpRequest对象。您可以检查XmlHttpRequest作为401 XmlHttpRequest.status == 401的状态代码,然后通过您的脚本将页面位置更改为登录名,如果您愿意,甚至可以提供消息。无论它是否生成401,任何非成功状态代码都应该调用ajax请求的失败回调,并且您应该能够处理您在处理失败的方法集中的情况。

像下面的通用代码可以处理您的失败。

function(xhr, errorText, ex){ 
    if(xhr.status == 401) { 
     //.. alert user and redirect to login .. 
     document.location = 'myloginpage.html'; 
    } 
    ... 
} 
+0

我会在哪里放这段代码(在哪里jquery ajax one,success,error,start,stop)?还有一种情况是200,000个错误会回来。看看我有Jquery.UI选项卡,似乎正在发生的事情是它返回Url并将其加载到实际选项卡中。 – chobo2 2009-11-09 20:40:31

+0

你会将它附加到错误回调。在这种情况下你会得到200吗? – 2009-11-09 20:42:48

+0

错误回调在哪里?我可能会在下面的情况下收到一条错误消息。用户走过大约10分钟和超时,然后尝试保存一些内容。将触发器和ajax请求保存到服务器。 Authorize标签阻止了这一点,并可能返回一个错误(不确定如何验证哪个错误)。 第二种情况是这样的。用户离开10分钟和超时,这次他碰到了我的一个启用了ajax的jquery ui选项卡。它会去服务器加载这个局部视图。但在此之前,授权标签将停止用户请求并将返回URL发回。 – chobo2 2009-11-09 20:46:27

0

一个简单的方法可能是在发生超时后将页面重定向到注销/登录页面。大多数有这种超时的网站会首先给你一个警告。如果你点击“确定”你的超时被重置。如果您点击“取消”或只是保留,页面将超时,您将被注销,并且您将被重定向到另一页面。

+0

雅,但我怎么做这个警告的事情。就像我如何知道服务器是否即将超时? – chobo2 2009-11-09 20:38:59

+0

我之前所做的是,找出会话何时会在服务器上过期,然后在JS中设置一个超时“setTimeout(expression,timeout)”来弹出警告,让用户知道它会很快超时。如果用户单击确定,则进行AJAX调用以重置服务器上的超时。如果不是,则应该有一个超时重定向用户,即设置为与服务器会话超时相同的时间。 – 2009-11-10 13:57:38

+0

以下是一个示例http://www.sidesofmarch.com/index.php/archive/2005/01/30/friendly-session-timeouts-the-javascript-way/ – 2009-11-10 13:59:31

相关问题