2012-04-04 10 views
13

Mam łącze, które wywołuje Ajax POST, aby wykonać akcję. Jeśli użytkownik nie jest jeszcze zalogowany, metoda działania zwraca przekierowanie 302 na stronę logowania. Jeśli tak się stanie, chcę przechwycić przekierowanie, dzięki czemu mogę wyświetlić formularz logowania w lightboxie.Jak uniemożliwić jQuery ajax śledzenie przekierowania po poście?

Wygląda jednak na to, że jQuery śledzi przekierowanie bez zwracania kontroli lub wywoływania funkcji zwrotnej. W poniższym kodzie alert przekierowania 302 nigdy nie jest wywoływany, a do czasu wywołania funkcji dataFiler dane są zawartością strony logowania.

Jak mogę zobaczyć, że strona wysłała przekierowanie 302 i rozgałęziła się na inną akcję?

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

Odpowiedz

11

Nie jest to ograniczenie z jQuery, ale z samą obsługą JavaScript; nie ma sposobu na wykrycie przekierowania w żądaniu AJAX w JavaScript; obiekty XHR przeglądarki automatycznie i niewidocznie śledzą przekierowania zgodnie z the spec.

Idealną opcją byłoby dodanie kodu catch do kodu serwera do detect an AJAX request ("HTTP_X_REQUESTED_WITH" nagłówek) i zwrócenie specjalnej odpowiedzi w celu wykrycia anonimowego użytkownika w kodzie JavaScript i należytego obchodzenia się z nim.

Powiązane problemy