Reindirizzamento su Ajax Jquery Call

Sono novizio di Ajax qui e so che qualcuno avrebbe già incontrato questo problema. Ho un’app legacy costruita su Spring MVC, ha un intercettore (filtro) che reindirizza l’utente alla pagina di accesso ogni volta che non ci sono sessioni.

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, funziona bene .. ma quando provo ad usare ajax nella mia applicazione, tutto diventa strano, non è in grado di redirect correttamente la pagina di accesso. Come controllare il valore del

xhr.status = 200 textStatus = parseError errorThrown = “JSON -Markup non valido della mia pagina di login 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); } }); }); 

Ho controllato sul mio firebug che esiste una risposta HTTP 302 ma non sono sicuro di come rilevare la risposta e redirect l’utente alla pagina di accesso. Qualche idea qui? Grazie.

JQuery sta cercando un risultato di tipo json , ma poiché il reindirizzamento viene elaborato automaticamente, riceverà il codice html generato della tua pagina login.htm .

Un’idea è di far sapere al browser che deve redirect aggiungendo una variabile di redirect all’object risultante e verificandone la presenza 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); } }); }); 

Puoi anche aggiungere una variabile di intestazione alla tua risposta e consentire al tuo browser di decidere dove redirect. In Java, invece di redirect, do response.setHeader("REQUIRES_AUTH", "1") e in JQuery fai su successo (!):

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

Spero possa aiutare.

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