1. ホーム
  2. javascript

[解決済み] jQuery Ajax呼び出し後のリダイレクトリクエストを管理する方法

2022-03-20 21:48:38

質問

私は $.post() を使用してサーブレットを呼び出し、その結果の HTML フラグメントで div 要素で構成されています。しかし、セッションがタイムアウトした場合、サーバーはユーザーをログインページに送るためのリダイレクトディレクティブを送信します。この場合、jQueryはログインページの div 要素の中身をログインページのコンテンツに置き換えるという、実に珍しい光景をユーザーの目に焼き付けることになる。

jQuery 1.2.6でAjax呼び出しからのリダイレクトディレクティブを管理するにはどうすればよいですか?

どのように解決するのですか?

最終的に実装された解決策は、Ajax呼び出しのコールバック関数にラッパーを使用し、このラッパーで返されたHTMLチャンクに特定の要素が存在するかどうかをチェックすることでした。もしその要素が見つかったら、ラッパーはリダイレクトを実行します。見つからない場合、ラッパーは実際のコールバック関数に呼び出しを転送します。

例えば、私たちのラッパー関数は次のようなものでした。

function cbWrapper(data, funct){
    if($("#myForm", data).length > 0)
        top.location.href="login.htm";//redirection
    else
        funct(data);
}

そして、Ajaxを呼び出すときには、次のようなものを使いました。

$.post("myAjaxHandler", 
       {
        param1: foo,
        param2: bar
       },
       function(data){
           cbWrapper(data, myActualCB);
       }, 
       "html"
);

Ajaxの呼び出しは常にDIV要素内のHTMLを返し、それを使ってページの一部を置き換えるので、これは私たちにとって有効でした。また、ログイン・ページにリダイレクトするだけでよかったのです。