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?
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:
Ihre Konsole sollte 1 oder mehr URLs melden, von denen die letzte sein wird:
http(s)://{yourdomain}/some/other/location
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!
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)
?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%