Erhalte die letzte URL vom XHR-Objekt nach der Weiterleitung

8

Angenommen, ich verwende ajax (z. B. über jQuery), um eine POST-Anfrage an eine API zu senden, die ein PRG-Muster implementiert. Daher wird es mich umleiten:

%Vor%

jQuery folgt dann automatisch der Weiterleitung und führt ein:

%Vor%

Und dann rufen Sie die Antworthandler (Erfolg, Fehler usw.) mit der Ausgabe von letzterer Anfrage auf. Wie kann ich jedoch den Speicherort der endgültigen Ressource ( /some/other/location in diesem Fall) in Javascript lesen?

    
Jeroen 08.05.2013, 00:46
quelle

4 Antworten

5

Soweit ich weiß, ist das mit dem XMLHttpRequest -Objekt nicht möglich. Wenn Sie jedoch innerhalb Ihrer [vertrauenswürdigen] Domäne arbeiten und wichtige Informationen vorliegen, können Sie stattdessen einen iframe verwenden:

%Vor%

Ihre Konsole sollte 1 oder mehr URLs melden, von denen die letzte sein wird:

http(s)://{yourdomain}/some/other/location

    
svidgen 15.05.2013 15:40
quelle
4

XMLHttpRequest stellt die endgültige URL nicht zur Verfügung.

: [

Aber , Sie können dies umgehen, ohne einen Iframe zu verwenden. Wenn Sie ein JSON-Objekt sind zurückkehren, könnten Sie eine finalURL Objekte hinzufügen, wie folgt aus:

%Vor%

und lies das, um die Post-Redirect-URL zu erhalten. Hoffe das ist hilfreich!

    
Chris 26.09.2013 21:44
quelle
0

Ich glaube, das ist im Allgemeinen nicht möglich, obwohl ich über die Chrome-Entwicklertools sehen kann, dass der Browser eine Antwort vom Server erhält und dann der Weiterleitung folgt.

Siehe diese Frage und Antwort: Ist es möglich, dass XHR HEAD-Anfragen Redirects nicht folgen (301 302)

?     
gb96 10.05.2013 12:15
quelle
0

Dies ist ein alter Beitrag, aber in Google ist er sehr beliebt, daher werde ich meine Lösung hinzufügen.

Wenn Sie die Kontrolle über die Ajax-Antwort haben, können Sie der Antwort einen Header mit der finalen URL hinzufügen.

In PHP wäre das etwa so:

header('X-final-url: /some/other/location') .

Dann können Sie in jQuery auf diesen Wert zugreifen mit:

var finalUrl = jqXHR.getResponseHeader('X-final-url');

Ich füge die Kopfzeile in Symfony mit einem Kernel-Listener hinzu:

Service

%Vor%

Listener-Klasse

%Vor%     
jxmallett 16.01.2017 05:03
quelle

Tags und Links