ぎこちないことをするときのセッションタイムアウトの問題を解決しようとしています。私は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リクエストを開始する必要があります。これは私が疑問に思っている部分です。出来ますか?