2010-05-28 6 views
20

Je suis débutant à ajax ici et je sais que quelqu'un aurait déjà rencontré ce problème. J'ai une application héritée construite sur Spring MVC, il a un intercepteur (filtre) qui redirige l'utilisateur vers la page de connexion chaque fois qu'il n'y a pas de session.Rediriger sur Ajax Jquery Appel

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; 
} 
} 

Pour toute demande non XMLHTTP, cela fonctionne très bien .. mais quand je tente d'utiliser ajax dans ma demande, tout devient bizarre, il ne peut pas rediriger vers la page de connexion correctement. Comme vérifier la valeur de la

xhr.status = 200 textStatus = parseError errorThrown = « non valide JSON -Markup de mon HTML Connectez-vous Page-

$(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); 
      } 

     }); 
}); 

J'ai vérifié sur mon Firebug qu'il ya un 302 HTTP réponse, mais je ne suis pas sûr de savoir comment attraper la réponse et redirigent l'utilisateur à la connexion page. Toute idée ici? Merci.

Répondre

47

JQuery est à la recherche d'un résultat de type JSON, mais parce que la redirection est traitée automatiquement, il recevra le a généré la source html de votre login.htm page.

Une idée est de laisser le navigateur qu'il doit rediriger en ajoutant une variable redirect à l'objet résultant et en vérifiant dans 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); 
     } 

    }); 
}); 

Vous pouvez également ajouter une variable d'en-tête à votre réponse et laissez votre navigateur décider où rediriger. En Java, au lieu de rediriger, faire response.setHeader("REQUIRES_AUTH", "1") et JQuery que vous faites sur le succès (!):

//.... 
     success:function(response){ 
      if (response.getResponseHeader('REQUIRES_AUTH') === '1'){ 
       window.location.href = 'login.htm'; 
      } 
      else { 
       // Process the expected results... 
      } 
     } 
//.... 

espoir qui aide.

Ma réponse est fortement inspirée par this thread qui ne devrait pas laisser de questions au cas où vous auriez encore des problèmes.

+0

Salut moonground .. Merci, je pense que j'ai déjà eu votre point donné cet exemple ... Merci beaucoup ... –

+0

Merci Thomas. Je l'ai un peu mais je vais lire votre thread référencé un peu plus pour qu'il puisse s'enfoncer un peu. Néanmoins, il semble que ce soit la réponse que je recherche, alors merci mille fois pour ça! – Mark

+1

Comment puis-je ajouter une variable de redirection à la réponse? – nikli

Questions connexes