监控请求检测会话超时的结果的简单方法?

时间:2010-07-13 13:07:22

标签: javascript jquery ajax session timeout

我有一个Ajax应用程序,我想添加会话和登录。

目前该应用程序使用jQuery get速记来发送请求

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编写相同的超时代码 - 整个应用程序中都有一堆超时代码。

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

谢谢,

2 个答案:

答案 0 :(得分: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();
    }
  }
});

在不知道您正在使用什么服务器平台的情况下,我无法说明如何设置标头,但在每个通用平台上都非常简单。

答案 1 :(得分:0)

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