我正在尝试解决执行ajaxy事务时的会话超时问题。我正在使用jQuery,并在有ajax错误时设置了一个函数。如果是401错误,我想基本暂停一切,让他们用弹出窗口登录,然后恢复一切。我不完全确定,但回调和闭包看起来像是可以帮助这项工作的单词,如果我对它们有更多了解,并且是否有可能跟踪ajax请求并在稍后调用的某个事件上重试它。
所以,如果他们正在进行像这样的ajax调用
data = {
input: value
};
if ($j.statusXHR) {
$j.statusXHR.abort();
}
$j.statusXHR = $j.ajax({
url: url,
data: data,
type: "POST",
success: function (data) {
div.html(data);
},
error: function (request, textStatus, error) {
handleErrors(request, textStatus, error, $j.statusXHR, contentDiv, data);
}
});
如果他们没有登录,它会进入此功能,显示一个登录按钮,打开登录页面的弹出窗口(因为openid在另一个域上,所以不能用ajax执行此操作) 。
function handleErrors(request, textStatus, error, xhr, elem, data) {
if (request.status === 401) {
// not logged in
url = "/login/ajaxExpired";
if (xhr) {
xhr.abort();
}
$j.ajax({
url: url,
success: function (data) {
elem.html(html);
}
});
}
}
openid部分的return_to页面应根据返回的参数检测登录是否成功,然后关闭弹出窗口并启动原始的ajax请求。这是我想知道的部分。可能吗?