私はここでajaxの初心者であり、誰かがすでにこの問題に遭遇していることを知っています。私はSpring MVC上に構築されたレガシーアプリを持っています、それはセッションがないときはいつでもログインページにユーザーをリダイレクトするインターセプター(フィルター)を持っています。
public class SessionCheckerInterceptor extends HandlerInterceptorAdapter {
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
// check if userInfo exist in session
User user = (User) session.getAttribute("user");
if (user == null) {
response.sendRedirect("login.htm");
return false;
}
return true;
}
}
非xmlhttpリクエストの場合、これは正常に機能します。しかし、アプリケーションでajaxを使用しようとすると、すべてが奇妙になり、ログインページに正しくリダイレクトできません。の値を確認するように
xhr.status = 200 textStatus = parseError errorThrown = "無効なJSON-HTMLログインページのマークアップ-
$(document).ready(function(){
jQuery.ajax({
type: "GET",
url: "populateData.htm",
dataType:"json",
data:"userId=SampleUser",
success:function(response){
//code here
},
error: function(xhr, textStatus, errorThrown) {
alert('Error! Status = ' + xhr.status);
}
});
});
Firebugで302 HTTP応答があることを確認しましたが、応答をキャッチしてユーザーをログインページにリダイレクトする方法がわかりません。ここにアイデアはありますか?ありがとう。
JQueryはjsonタイプの結果を探していますが、リダイレクトは自動的に処理されるため、生成されたhtmlを受け取ります_login.htm
_ページのsource。
1つのアイデアは、結果のオブジェクトにredirect
変数を追加し、JQueryでチェックすることで、リダイレクトする必要があることをブラウザーに知らせることです。
_$(document).ready(function(){
jQuery.ajax({
type: "GET",
url: "populateData.htm",
dataType:"json",
data:"userId=SampleUser",
success:function(response){
if (response.redirect) {
window.location.href = response.redirect;
}
else {
// Process the expected results...
}
},
error: function(xhr, textStatus, errorThrown) {
alert('Error! Status = ' + xhr.status);
}
});
});
_
また、応答にヘッダー変数を追加し、ブラウザーにリダイレクト先を決定させることもできます。 Javaでは、リダイレクトの代わりにresponse.setHeader("REQUIRES_AUTH", "1")
を実行し、JQueryではsuccess(!)で実行します。
_//....
success:function(response){
if (response.getResponseHeader('REQUIRES_AUTH') === '1'){
window.location.href = 'login.htm';
}
else {
// Process the expected results...
}
}
//....
_
お役に立てば幸いです。
私の答えは このスレッド に強く触発されており、まだ問題がある場合に質問を残すべきではありません。