2010-07-13 89 views
2

我有一个Ajax应用程序,我想添加会话和登录。简单的方法来监视请求的结果来检测会话超时?

目前该应用程序使用jQuery的获得速记发送一个请求

that.ajaxRequest = $.get(query_string, function(data, textStatus, xhr) { 

    // do somthing with data 

}); 

我有一个系统,如果会话已过期抛出的错误消息的服务器上。

在我知道我能应付这种使用在客户端执行以下操作:

that.ajaxRequest = $.get(query_string, function(data, textStatus, xhr) { 

    if (data == "E_TIMEOUT") { 

     // redirect to login 

    } else { 

     // do something 

    } 

}); 

但是我宁愿不要有写每$不用彷徨相同的超时代码 - 有一群人整个应用程序。

有没有办法监视请求的结果并在必要时采取措施,而不必重写所有$ .get语句?

感谢,

+0

你真的应该检查/验证返回的响应。你可以为此创建一个特定的函数,以最小化你添加到每个回调的代码。如果(dataChecker(data)){}和dataChecker可以根据错误消息(如果有)负责重定向或其他功能。 – Fosco 2010-07-13 13:15:42

回答

3

您可以使用$.ajaxSetup()此:

$.ajaxSetup({ 
    complete: function (xhr) { 
    if (xhr.getResponseHeader('E_TIMEOUT') == "1") { 
     //redirect to login 
    } 
    } 
}); 

这种做法略有不同,它采用响应头,你可以得到没有分析数据的额外的时间,每一个请求(即是可能的,虽然没有记录并且可能会中断),否则在全球情况下您将不得不采取其他措施。

在服务器端,您要发送E_TIMEOUT作为响应,只需将其更改为添加标头,即E_TIMEOUT=1(或任何您想要的标头)。实际上,我只在我的登录页面上放置这个头文件,超时重定向通过302(XmlHttpRequest透明地遵循),所以如果用户超时和AJAX请求实际上在登录页面结束,我会做一个location.reload()来反映页。这只是另一种选择,如果你走这条路线,它看起来是这样的:

$.ajaxSetup({ 
    complete: function (xhr) { 
    if (xhr.getResponseHeader('LoginPage') == "1") { 
     location.reload(); 
    } 
    } 
}); 

不知道什么服务器平台,你使用我不能说如何设置头,但它在每一个公共平台很容易。

+0

非常好。谢谢! – Travis 2010-07-13 13:37:50

0

您应该使用firefox并下载一个名为'FireBug'的程序。这将向您显示所有发送的请求以及AJAX调用返回的响应。这是行动充满善良&网络开发工具。

相关问题