1

我正在尝试解决在做 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);
    }
});

如果他们没有登录,它会进入这个函数,它会显示一个登录按钮,它会打开一个登录页面的弹出窗口(不能使用 ajax 执行此操作,因为 openid 在另一个域上)。

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请求。这是我想知道的部分。可能吗?

4

0 回答 0