Otrzymałem więc wywołanie jQuery AJAX, a odpowiedź pochodzi z serwera w postaci przekierowania 302. Chciałbym wziąć to przekierowanie i załadować je w ramce iframe, ale kiedy próbuję wyświetlić informacje nagłówka z alertem javascript, pojawia się wartość null, mimo że firebug widzi to poprawnie.
Oto kod, jeśli to pomoże:
$j.ajax({
type: 'POST',
url:'url.do',
data: formData,
complete: function(resp){
alert(resp.getAllResponseHeaders());
}
});
Naprawdę nie mam dostępu do rzeczy po stronie serwera, aby przenieść adres URL do treści odpowiedzi, co, jak wiem, byłoby najłatwiejszym rozwiązaniem, więc każda pomoc przy parsowaniu nagłówka byłaby fantastyczna.
post
pierwotny serwer i wyodrębniał dane docelowe, a frontendowy JS zażąda tego serwera proxy dla danych docelowych. Lub 2) zmień kod serwera, aby zezwolić na CORS.Odpowiedzi:
Rozwiązanie cballou będzie działać, jeśli używasz starej wersji jquery. W nowszych wersjach możesz też spróbować:
Zgodnie z dokumentacją obiekt XMLHttpRequest jest dostępny od jQuery 1.4.
źródło
Jeśli jest to żądanie CORS , możesz zobaczyć wszystkie nagłówki w narzędziach do debugowania (takich jak Chrome-> Inspect Element-> Network), ale obiekt xHR pobierze nagłówek (via
xhr.getResponseHeader('Header')
) tylko wtedy, gdy taki nagłówek jest prostym nagłówkiem odpowiedzi :Content-Type
Last-modified
Content-Language
Cache-Control
Expires
Pragma
Jeśli nie ma go w tym zestawie, musi być obecny w nagłówku Access-Control-Expose-Headers zwróconym przez serwer.
O omawianym przypadku, jeśli jest to żądanie CORS, można będzie pobrać
Location
nagłówek za pośrednictwemXMLHttpRequest
obiektu tylko wtedy i tylko wtedy, gdy nagłówek poniżej również jest obecny:Jeśli nie jest to żądanie CORS, nie
XMLHttpRequest
będzie problemu z jego odzyskaniem.źródło
źródło
Niefortunna prawda o AJAX i przekierowaniu 302 jest taka, że nie możesz pobrać nagłówków ze zwrotu, ponieważ przeglądarka nigdy nie przekazuje ich do XHR. Kiedy przeglądarka widzi 302, automatycznie stosuje przekierowanie. W takim przypadku zobaczysz nagłówek w firebug, ponieważ przeglądarka go dostała, ale nie zobaczysz go w Ajax, ponieważ przeglądarka go nie przekazała. Dlatego nigdy nie są wywoływane programy obsługujące powodzenie i błędy. Wywoływana jest tylko pełna obsługa.
http://www.checkupdown.com/status/E302.html
Oto kilka postów na ten temat. Niektóre posty opisują sposoby na obejście tego problemu.
Jak zarządzać żądaniem przekierowania po wywołaniu jQuery Ajax
Łapanie 302 FOUND w JavaScript
Przekierowanie HTTP: 301 (stałe) i 302 (tymczasowe)
źródło
Bazowy obiekt XMLHttpRequest używany przez jQuery zawsze będzie po cichu podążał za przekierowaniami, zamiast zwracać kod stanu 302. W związku z tym nie można użyć funkcji żądania AJAX jQuery do uzyskania zwróconego adresu URL. Zamiast tego musisz umieścić wszystkie dane w formularzu i przesłać formularz z
target
atrybutem ustawionym na wartośćname
atrybutu elementu iframe:Strona serwera
url.do
zostanie załadowana do elementu iframe, ale gdy nadejdzie jej stan 302, element iframe zostanie przekierowany do miejsca docelowego.źródło
Spróbuj tego:
źródło
UPDATE 2018 DLA JQUERY 3 I PÓŹNIEJ
Wiem, że to stare pytanie, ale żadne z powyższych rozwiązań nie zadziałało. Oto rozwiązanie, które zadziałało:
źródło
+1 do PleaseStand, a oto mój inny hack:
po wyszukaniu i stwierdzeniu, że „cross ajax request” nie mógł uzyskać nagłówków odpowiedzi z obiektu XHR, poddałem się. i zamiast tego użyj elementu iframe.
źródło