2010-05-28 3 views
20

Sono novizio di ajax qui e so che qualcuno avrebbe già riscontrato questo problema. Ho un'app legacy costruita su Spring MVC, ha un intercettore (filtro) che reindirizza l'utente alla pagina di login ogni volta che non c'è alcuna sessione.Reindirizza su Ajax Jquery Chiama

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

Per la richiesta non XMLHTTP, questo funziona bene .. ma quando provo ad usare ajax nella mia richiesta, tutto diventa strano, non è in grado di reindirizzare alla pagina di login in modo corretto. Come controllare il valore della

xhr.status = 200 = textStatus parseError errorThrown = "non valido JSON -Markup del mio HTML Accesso 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); 
      } 

     }); 
}); 

ho controllato il mio Firebug che c'è un 302 HTTP la risposta, ma non sono sicuro come catturare la risposta e reindirizzare l'utente alla pagina di login . Qualsiasi idea qui? Grazie.

risposta

47

JQuery è alla ricerca di un jSON risultato tipo, ma perché il reindirizzamento viene elaborato automaticamente, riceverà il generato sorgente HTML della tua pagina login.htm.

Un'idea è quella di lasciare che il browser sa che dovrebbe reindirizzare con l'aggiunta di una variabile redirect per l'oggetto risultante e controllo per questo in 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); 
     } 

    }); 
}); 

Si potrebbe anche aggiungere una variabile di intestazione al risposta e lascia che il tuo browser decida dove reindirizzare. In Java, invece di reindirizzamento, fare response.setHeader("REQUIRES_AUTH", "1") e JQuery si fa in caso di successo (!):

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

Speranza che aiuta.

La mia risposta è fortemente ispirata allo this thread che non dovrebbe lasciare alcuna domanda in caso di problemi.

+0

Ciao moonground .. Grazie, penso di aver già ottenuto il tuo punto dato questo esempio ... Grazie mille ... –

+0

Grazie Thomas. Io lo capisco, ma ho intenzione di leggere il tuo thread di riferimento un po 'di più in modo che possa affondare un po'. Nondimeno, sembra essere la risposta che sto cercando, grazie mille per questo! – Mark

+1

Come posso aggiungere la variabile di reindirizzamento alla risposta? – nikli