Erkennen einer Umleitung in jQuery $ .ajax?
Ich jQuery verwenden möchten, ERHALTEN eine URL und explizit zu überprüfen, wenn es reagierte mit einer 302-Umleitung, aber nicht Folgen Sie der Umleitung.
jQuery $.ajax
erscheint immer Folgen leitet. Wie kann ich dies verhindern, und sehen Sie die redirect ohne?
Gibt es verschiedene Fragen, die mit Titeln wie "jquery ajax umleiten", aber scheinen Sie alle zu umfassen Erfüllung einige andere Ziel, anstatt einfach direkt den status überprüfen, dass ein server gibt.
InformationsquelleAutor der Frage kdt | 2012-02-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den AJAX-request nie die Möglichkeit hat, Folgen Sie NICHT der Umleitung (d.h., es müssen die Folgen der Umleitung). Weitere Informationen finden Sie in dieser Antwort https://stackoverflow.com/a/2573589/965648
InformationsquelleAutor der Antwort Nick Garvey
Willkommen in der Zukunft!
Jetzt haben wir ein "responseURL" - Eigenschaft von xhr-Objekt. YAY!
Sehen Wie, um eine Reaktion zu erhalten-url in XMLHttpRequest?
Jedoch jQuery (zumindest 1.7.1) keinen Zugang zum XMLHttpRequest-Objekt direkt.
Sie können so etwas wie dies:
Es ist keine saubere Lösung und ich nehme an, jQuery-team etwas für responseURL in den zukünftigen Versionen.
TIPP: vergleichen Sie einfach die original-URL mit responseUrl. Wenn es gleich ist dann keine Umleitung gegeben wurde. Wenn es "undefined" dann responseUrl ist wahrscheinlich nicht unterstützt. Aber als Nick Garvey sagte, AJAX-Anfrage nie die Möglichkeit hat, Folgen Sie NICHT der Umleitung, sondern Sie lösen eine Reihe von Aufgaben mithilfe responseUrl Eigenschaft.
InformationsquelleAutor der Antwort Riki_tiki_tavi
Während die anderen Leute, die diese Frage beantwortet haben, sind (leider) richtig, dass diese information verborgen ist, die uns durch den browser, ich dachte, ich würde post ein workaround kam ich mit:
Konfigurierte ich mein server-app, um eine benutzerdefinierte Antwort-header (
X-Response-Url
) mit der url, die angefordert wurde. Immer wenn mein ajax-code eine Antwort erhält, überprüft er, obxhr.getResponseHeader("x-response-url")
ist definiert, in welchem Fall er vergleicht es mit der url, die Sie ursprünglich angefordert über$.ajax()
. Wenn die strings unterscheiden, ich weiß, es war eine Umleitung, und zusätzlich, welche url wir tatsächlich angekommen.Dieser hat zwar den Nachteil, dass manche server-Seite helfen, und kann auch brechen, wenn die url bekommt verwurschtelt (durch zitieren/encoding-Fehler etc) während der Rundreise... aber für 99% der Fälle, das scheint, um den job zu erledigen.
Auf der server-Seite, in meinem konkreten Fall war eine python-Anwendung mit dem Pyramid web framework, und ich verwendet die folgenden snippet:
InformationsquelleAutor der Antwort Eli Collins
Umleiten die Datei, nachdem der json-Antwort vom live-server. überprüfen Sie für die Antwort-tag
success ==1
und setzen Sie den folgenden code für die Umleitung.
InformationsquelleAutor der Antwort Panneer