我有一个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语句?
谢谢,
答案 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调用返回的响应。这是充满善良的动作。网络开发工具。