jQuery Ajax 呼び出し後のリダイレクト要求を管理する方法 質問する

jQuery Ajax 呼び出し後のリダイレクト要求を管理する方法 質問する

私は、$.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.redirectJSON オブジェクト「data」は、との 2 つのメンバーを持つようにサーバー上で構築されますdata.form。このアプローチの方がはるかに優れていることがわかりました。

おすすめ記事