私は、$.post()
Ajax を使用してサーブレットを呼び出し、その結果の HTML フラグメントを使用してdiv
ユーザーの現在のページの要素を置き換えています。ただし、セッションがタイムアウトすると、サーバーはリダイレクト ディレクティブを送信して、ユーザーをログイン ページに送ります。この場合、jQuery は要素をdiv
ログイン ページのコンテンツに置き換えており、ユーザーには実に珍しい光景を目にさせることになります。
jQuery 1.2.6 を使用して Ajax 呼び出しからのリダイレクト ディレクティブを管理するにはどうすればよいですか?
ベストアンサー1
私はこの質問を読み、ブラウザが透過的にリダイレクトを処理するのを避けるために、応答HTTP ステータス コードを278 に設定するというアプローチを実装しました。これはうまくいきましたが、ちょっとしたハックのようなので、少し不満でした。
さらに調べた結果、私はこのアプローチをやめて翻訳この場合、AJAX リクエストに対するすべての応答のステータス コードは 200 となり、応答の本文にはサーバー上で構築された JSON オブジェクトが含まれます。クライアント上の JavaScript は、JSON オブジェクトを使用して、必要な処理を決定できます。
私もあなたと同じような問題を抱えていました。私は 2 つの可能な応答を持つ AJAX リクエストを実行しました。1 つはブラウザを新しいページにリダイレクトするもの、もう 1 つは現在のページにある既存の HTML フォームを新しいものに置き換えるものです。これを行う jQuery コードは次のようになります。
$.ajax({
type: "POST",
url: reqUrl,
data: reqBody,
dataType: "json",
success: function(data, textStatus) {
if (data.redirect) {
// data.redirect contains the string URL to redirect to
window.location.href = data.redirect;
} else {
// data.form contains the HTML for the replacement form
$("#myform").replaceWith(data.form);
}
}
});
data.redirect
JSON オブジェクト「data」は、との 2 つのメンバーを持つようにサーバー上で構築されますdata.form
。このアプローチの方がはるかに優れていることがわかりました。