3

ほとんどのリクエストが AJAX 経由で送信されるアプリケーションがありますが、一部は「通常の」HTTP リクエスト経由で送信されます。リクエストが送信され、ユーザーのセッションがタイムアウトした場合、次の JSON が返されます。

{"authentication":"required"}

すべての AJAX 要求を送信する JavaScript 関数は、ポップアップ メッセージを表示し、ユーザーをログイン ページにリダイレクトすることで、この応答を処理します。

ただし、AJAX 以外のリクエストがこのレスポンスを受信すると、JSON がブラウザに表示されるだけです。これは、レスポンスがブラウザによって直接処理されるためです (つまり、前述の JavaScript 関数がバイパスされます)。明らかにこれは理想的ではなく、この応答を受け取る非 AJAX 要求が AJAX 要求と同じように動作することを望みます。これを達成するために、2 つのオプションを考えることができます。

  1. アプリケーションを調べて、すべてのリクエストを AJAX リクエストに変換します。これは機能しますが、時間がかかる可能性もあります。

  2. 上記の JSON は、非常に単純な JSP によって生成されます。コンテンツがブラウザーに表示される直前に実行される JavaScript イベント ハンドラーをこの JSP に追加できるかどうか疑問に思っています。このハンドラーは、ポップアップを表示してリダイレクトを実行する他の JavaScript コードを呼び出すことができます。

(2) で概説したハンドラーを正確に実装する方法を誰かが知っている場合、または他の潜在的な解決策がある場合は、それらを伝えていただければ幸いです。

乾杯、ドン

4

4 に答える 4

3

3) AJAX コードを変更して、変数を GET または POST に追加します。outputJson=1

于 2008-10-31T16:38:33.643 に答える
1

このように JSP にハンドラーを追加することはできません。追加すると、非 JSON 生成ページになります。

私が見ることができる 2 つのオプションがあります: 出力を変更する画面に URL パラメーターを追加して、ページにパラメーターを追加します。

URL: http://domain/page.jsp?ajaxRequest=true は json のみを出力します

URL: http://domain/page.jsp は、別のページに転送できる jsp ページを表示します。

また

応答を変更して、直接ヒットした場合に Web ブラウザーによって実行される JSP に転送コードを含めます。次に、AJAX を呼び出して転送コードを取り除き、残ったものを処理します。

于 2008-10-31T16:39:06.277 に答える
0

次のような、よりスマートなエラー メッセージから始めます。

{"error":"authentication required"}

JSON 出力をコールバックでラップします。

errorHandler({"error":"authentication required"});

スクリプトでハンドラーを待機させます。

function errorHandler(r) {
   alert(r.error);
}

text/javascriptas and notで送信することを忘れないでくださいapplication/x-json

于 2008-11-20T18:45:37.707 に答える
0

4) 「Accept」リクエストの HTTP ヘッダーを確認します。

次に、サーバー側で出力を調整します。

例えば

if(Accept contains application/json...) { // client asking for json, likely  to be XHR
  return {"foo":"bar"}
} else { // other
  return "Location: /login-please";
}
于 2008-10-31T16:42:46.083 に答える