2012-04-04 5 views
13

Ich habe einen Link, der einen Ajax-POST absetzt, um eine Aktion auszuführen. Wenn der Benutzer noch nicht angemeldet ist, gibt die Aktionsmethode eine 302-Weiterleitung an die Anmeldeseite zurück. Wenn das passiert, möchte ich die Umleitung abfangen, damit ich das Login-Formular in einem Leuchtkasten anzeigen kann.Wie verhindert man, dass jQuery ajax einer Weiterleitung nach einem Post folgt?

Es scheint jedoch, dass jQuery der Umleitung folgt, ohne die Steuerung zurückzugeben oder eine Rückruffunktion aufzurufen. Im folgenden Code wird die Warnung von 302 redirect nie aufgerufen, und zu dem Zeitpunkt, zu dem die Funktion DataFiler aufgerufen wird, sind die Daten der Inhalt der Anmeldeseite.

Wie kann ich sehen, dass die Seite eine 302-Weiterleitung gesendet hat und zu einer anderen Aktion verzweigt?

$.ajax(url, 
     { 
      data: postArguments, 
      type : "POST", 
      success: function (data) { alert(' success function'); }, 
      statusCode: 
      { 
       302: function() { alert(' received redirect 302'); }, 
       301: function() { alert(' received redirect 301'); } 
      }, 
      dataFilter: function (data, type) { alert('got data ' + data); return data; } 
     }); 

Antwort

11

Dies ist keine Einschränkung mit jQuery, sondern mit JavaScript selbst; Es gibt keine Möglichkeit, eine Weiterleitung in einer AJAX-Anfrage in JavaScript zu erkennen. Die XHR-Objekte des Browsers folgen automatisch und unsichtbar den Weiterleitungen gemäß the spec.

Die ideale Option wäre, einen Haken in Ihrem Server-Code detect an AJAX request ("HTTP_X_REQUESTED_WITH" Header) hinzuzufügen und eine spezielle Antwort zurückgeben, um einen anonymen Benutzer in Ihrem JavaScript zu erkennen und entsprechend zu behandeln.

Verwandte Themen