Πώς να διαχειριστείτε ένα αίτημα ανακατεύθυνσης μετά από μια κλήση jQuery Ajax

Χρησιμοποιώ το $.post() για να καλέσω ένα servlet χρησιμοποιώντας Ajax και στη συνέχεια να χρησιμοποιήσω το προκύπτον τμήμα HTML για να αντικαταστήσω ένα στοιχείο div στην τρέχουσα σελίδα του χρήστη. Ωστόσο, εάν η σύνοδος λήξει, ο διακομιστής στέλνει μια οδηγία ανακατεύθυνσης για να στείλει τον χρήστη στη σελίδα σύνδεσης. Σε αυτή την περίπτωση, η jQuery αντικαθιστά το στοιχείο div με τα περιεχόμενα της σελίδας σύνδεσης, αναγκάζοντας τα μάτια του χρήστη να γίνουν μάρτυρες μιας πραγματικά σπάνιας σκηνής.

Πώς μπορώ να διαχειριστώ μια οδηγία ανακατεύθυνσης από μια κλήση Ajax με την jQuery 1.2.6;

Χρησιμοποιήστε την κλήση χαμηλού επιπέδου $.ajax():

$.ajax({
  url: "/yourservlet",
  data: { },
  complete: function(xmlHttp) {
    // xmlHttp is a XMLHttpRquest object
    alert(xmlHttp.status);
  }
});

Δοκιμάστε αυτό για μια ανακατεύθυνση:

if (xmlHttp.code != 200) {
  top.location.href = '/some/other/page';
}
Σχόλια (9)

στο servlet θα πρέπει να βάλετε response.setStatus(response.SC_MOVED_PERMANENTLY); για να στείλετε την κατάσταση '301' xmlHttp που χρειάζεστε για μια ανακατεύθυνση...

και στη συνάρτηση $.ajax δεν θα πρέπει να χρησιμοποιήσετε τη συνάρτηση .toString()..., απλά

if (xmlHttp.status == 301) { top.location.href = 'xxxx.jsp', }

το πρόβλημα είναι ότι δεν είναι πολύ ευέλικτο, δεν μπορείτε να αποφασίσετε πού θέλετε να ανακατευθύνετε...

η ανακατεύθυνση μέσω των servlets θα έπρεπε να είναι ο καλύτερος τρόπος. αλλά ακόμα δεν μπορώ να βρω τον σωστό τρόπο να το κάνω.

Σχόλια (0)

Επιπλέον, πιθανότατα θα θέλετε να ανακατευθύνετε τον χρήστη στη διεύθυνση URL που δίνεται στις επικεφαλίδες. Έτσι τελικά θα μοιάζει με αυτό:

$.ajax({
    //.... other definition
    complete:function(xmlHttp){
        if(xmlHttp.status.toString()[0]=='3'){
        top.location.href = xmlHttp.getResponseHeader('Location');
    }
});

UPD: Opps. Έχω την ίδια εργασία, αλλά δεν λειτουργεί. Κάνω αυτά τα πράγματα. Θα σας δείξω τη λύση όταν τη βρω.

Σχόλια (1)