Wie man ein redirect-Anforderung nach einen jQuery-Ajax-call
Ich bin mit $.post()
Aufruf ein servlet Ajax verwenden und dann mit den resultierenden HTML-fragment zu ersetzen div
element in der Nutzer die aktuelle Seite. Allerdings, wenn die Sitzung abläuft, sendet der server ein redirect-Direktive, um zu senden der Benutzer auf die login-Seite. In diesem Fall, jQuery ersetzt das div
element mit dem Inhalt der login-Seite, zwingen die Augen des Benutzers zu bezeugen, eine seltene Szene in der Tat.
Wie manage ich eine redirect-Direktive aus einem Ajax-call mit jQuery-1.2.6?
(keine Antwort) - ich habe dies in der Vergangenheit durch die Bearbeitung der jquery-Bibliothek und das hinzufügen von ein Häkchen für die login-Seite auf jedem XHR-abgeschlossen. Nicht die beste Lösung, denn es hätte getan werden, jedes mal, wenn Sie aktualisieren, aber es hat das problem zu lösen.
Siehe Verwandte Frage: stackoverflow.com/questions/5941933/...
Die
Warum kann der server return 401? In diesem Fall können Sie mit global $.ajaxSetup und benutzen Sie die-status-code-redirect-Seite.
dieser link doanduyhai.wordpress.com/2012/04/21/... gibt mir die richtige Lösung
Siehe Verwandte Frage: stackoverflow.com/questions/5941933/...
Die
HttpContext.Response.AddHeader
überprüfen an ajaxsetup Erfolg ist der Weg zu gehenWarum kann der server return 401? In diesem Fall können Sie mit global $.ajaxSetup und benutzen Sie die-status-code-redirect-Seite.
dieser link doanduyhai.wordpress.com/2012/04/21/... gibt mir die richtige Lösung
InformationsquelleAutor Elliot Vargas | 2008-10-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lese ich diese Frage und implementiert den Ansatz, der angegeben wurde, bezüglich der Einstellung der Antwort-status-code 278 um zu vermeiden, dass der browser transparente Umgang mit den Umleitungen. Obwohl das funktionierte, war ich ein wenig unzufrieden wie es ist ein bisschen ein hack.
Nach mehr zu Graben um, I ditched diesen Ansatz und verwendet JSON. In diesem Fall werden alle Antworten auf ajax-Anfragen, die den status code 200 und die Körpers der die Antwort enthält ein JSON-Objekt, das aufgebaut ist auf dem server. Das javascript auf der client kann dann das JSON-Objekt, um zu entscheiden, was es tun muss.
Ich hatte ein ähnliches problem, zu verkaufen. Ich führe eine ajax-Anfrage, die hat 2 mögliche Antworten: einer, der leitet den browser zu einer neuen Seite, und eine, die ersetzt eine vorhandene HTML-Formular auf der aktuellen Seite mit einer neuen. Der jquery-code dazu sieht so aus:
Das JSON-Objekt "Daten" aufgebaut ist auf dem server zu haben 2 Mitglieder: Daten.redirect und Daten.form. Ich fand, dass dieser Ansatz viel besser.
Einen Grund, warum es es nicht besser wäre, für die Verwendung eines HTTP-codes auf der action. Zum Beispiel ein 307-code, der HTTP-Temporary Redirect?
Golos der Grund ist, dass wenn Sie eine HTTP-Umleitung, die Umleitung eigentlich nie kommt, um die ajax-success-callback. Der browser verarbeitet die Umleitung liefert einen 200-code mit dem Inhalt der Umleitung auf die Ziel.
Dies funktioniert nur, wenn Sie die Kontrolle auf dem server
Diese Antwort wäre hilfreicher, wenn sich gezeigt hatte, wie dies geschieht auf dem server.
InformationsquelleAutor Steg
Ich dieses Problem gelöst durch:
Hinzufügen einer benutzerdefinierten header der Antwort:
Bindung eine JavaScript-Funktion, um die
ajaxSuccess
Ereignis und zu prüfen, wenn der header vorhanden ist:Ich Tat dies und fand, dass ich brauchte, ajaxComplete, wo ich mit dem $.get () - Funktion und beliebigen anderen status als 200 wurde nicht gefeuert. In der Tat, hätte ich wahrscheinlich nur gebunden zu ajaxError statt. Siehe meine Antwort weiter unten für mehr details.
Es ist ok, in vielen Fällen, was aber, wenn das framework übernimmt die Autorisierung ?
Ich mag den header Ansatz, aber denke auch, dass - wie @mwoods79 -, dass die wissen, wohin Sie weitergeleitet werden, sollten nicht dupliziert werden. Ich gelöst, dass durch das hinzufügen einer header-REDIRECT_LOCATION statt einem boolean.
Kümmern sich um den header auf die Antwort NACH der Umleitung. Wie beschrieben in den anderen Antworten auf dieser Seite, die umgeleitet werden kann, transparent für den ajaxSucces handler. So habe ich die header auf die Antwort der login-Seite (die war schließlich und nur der Auslösung ajaxSuccess in meinem Szenario).
InformationsquelleAutor
Kein Browser verarbeiten 301 und 302 Antworten richtig. Und in der Tat der standard selbst sagt, Sie sollte mit Ihnen umgehen "transparent", die eine MASSIVE Kopfschmerzen für Ajax-Bibliothek Anbietern. In Ra-Ajax wir gezwungen waren, in mit HTTP-response status-code 278 (nur einige "unbenutzte" success " - code) zu handhaben, transparent, Umleitungen von dem server...
Dies ärgert mich wirklich, wenn hier jemand etwas "ziehen" im W3C, würde ich schätzen, dass Sie lassen kann, W3C wissen, dass wir wirklich behandeln müssen, 301 und 302-codes selbst...! 😉
Ist es nicht schon Griff Sie transparent? Wenn eine Ressource verschoben, Umgang mit it-transparent bedeutet, dass die Wiederholung der Anfrage an die angegebene URL. Das ist das, was ich erwarten würde, mit dem XMLHttpRequest-API.
Stimmen. Transparent handling ist genau das, was ich will. Und ich weiß nicht, warum es als schlecht.
Gerne für ein redirect von der markup-Code in die main-Sektion, ohne dass Sie die Seite.
InformationsquelleAutor Thomas Hansen
Die Lösung wurde schließlich realisiert wurde, war die Verwendung einer wrapper für die callback-Funktion des Ajax-Aufrufs, und in dieser wrapper-check für das Vorhandensein einer bestimmten element auf der zurückgegebenen HTML-chunk. Wenn das element gefunden wurde, dann ist der wrapper ausgeführt eine Umleitung. Wenn nicht, wird die wrapper weitergeleitet, der Aufruf an die eigentliche callback-Funktion.
Beispielsweise unsere wrapper-Funktion war so etwas wie:
Dann, wenn der Ajax-Aufruf verwendeten wir so etwas wie:
Dieser arbeitete für uns, da alle Ajax-Aufrufe immer wieder HTML innerhalb eines DIV-Elements, mit dem wir ersetzen Sie ein Stück von der Seite. Auch, wir brauchten nur zum umleiten auf die login-Seite.
Größe ist abgeschrieben, so dass Sie verwenden können .Länge hier im Ort von der Größe
ich bin versucht, diese seine nicht funktioniert für mich
InformationsquelleAutor Elliot Vargas
Ich mag Timmerz Methode, mit einem leichten twist von Zitrone. Wenn Sie jemals zurückgegeben contentType von text/html, wenn Sie erwarten sind JSON, sind Sie wahrscheinlich umgeleitet. In meinem Fall habe ich einfach die Seite neu laden, und es wird auf die Anmeldeseite umgeleitet. Oh, und überprüfen Sie, dass das jqXHR-status 200 ist, scheint dumm, denn Sie sind in der error-Funktion, richtig? Ansonsten legitimen Fehler Fällen zwingen wird, ein iterativer reload (oops)
Ich überprüfte für den status 401 und dann umleiten. Funktioniert wie ein champ.
InformationsquelleAutor BrianY
Verwendung der low-level
$.ajax()
nennen:Versuchen, diese für eine Umleitung:
Btw, $.ajax() ist nicht sehr, sehr low-level. Es ist nur low-level-in Bezug auf jQuery, weil es ist $.get, $.post, etc. die sind viel einfacher, als $.ajax und all seinen Optionen.
Oh boy! Sorry, ich hatte zu "un-akzeptieren" Ihre Antwort, ist es immer noch sehr hilfreich. Sache ist, Verweise werden automatisch verwaltet durch das XMLHttpRequest-Objekt, daher habe ich IMMER einen 200-status-code nach der Umleitung (seufz!). Ich denke, ich werde zu tun haben, etwas böse wie das Parsen der HTML-und der Blick für eine Marke.
Einfach nur neugierig, wenn die Sitzung endet, auf dem server, heißt das nicht, sendet der server eine andere SESSIONID? können wir nicht nur erkennen, dass?
HINWEIS: Dies funktioniert nicht für Weiterleitungen. ajax wird gehen Sie zu der neuen Seite und wieder seinen status code.
InformationsquelleAutor Till
Ich wollte nur zu teilen meinen Ansatz, auch wenn dieser es könnte jemand helfen:
Ich im Grunde enthalten ein JavaScript-Modul übernimmt die Authentifizierung Sachen wie Anzeige des Benutzernamens und auch in diesem Fall die Handhabung der redirect auf die login-Seite.
Mein Szenario: Wir haben im Grunde ein ISA-server dazwischen, hört zu, alle Anfragen und antwortet mit einer 302 und einen location-header auf unsere login-Seite.
In meinem JavaScript-Modul meine ersten Ansatz war so etwas wie
Das problem (wie viele hier bereits erwähnt) ist, dass der browser verarbeitet die Umleitung von selbst darum meine
ajaxComplete
Rückruf kam nie genannt wird, aber stattdessen bekam ich die Reaktion der bereits umgeleitete Login-Seite, die offensichtlich einstatus 200
. Das problem: wie erkennen Sie, ob die erfolgreiche 200-Antwort ist Ihre tatsächliche login-Seite oder nur einige andere beliebige Seite??Die Lösung
Da war ich nicht in der Lage zu erfassen 302 redirect Antworten, ich habe eine
LoginPage
header auf meiner login-Seite, die die url der login-Seite selbst. In das Modul habe ich jetzt hören für den Kopf-und machen eine Umleitung:...und das funktioniert wie Charme :). Sie Fragen sich vielleicht, warum ich die url in die
LoginPage
header...naja, eigentlich, weil ich keine Möglichkeit gefunden, die Bestimmung der urlGET
sich aus der automatischen Standort-Weiterleitung von derxhr
Objekt...X-
werden, damit ein besserer header zu verwenden, wäreX-LoginPage: http://example.com/login
.Nicht mehr. Ich habe nicht den X - Präfix, da in Juni 2011 eine ITEF-Dokument vorgeschlagen, Ihr veralten und in der Tat, mit Juni 2012 es ist keine offizielle, benutzerdefinierte Header sollte nicht mehr vorangestellt werden
X-
.Wir haben auch einen ISA-server und ich lief in das gleiche Problem. Anstatt um ihn zu arbeiten im code, haben wir die Anweisungen in kb2596444 zum konfigurieren von ISA zu stoppen, umleiten.
InformationsquelleAutor Juri
Ich weiß, das Thema ist alt, aber ich gebe noch einen anderen Ansatz, den ich gefunden habe und die zuvor beschriebenen hier. Grundsätzlich bin ich mit ASP.MVC mit WIF (aber das ist nicht wirklich wichtig für den Zusammenhang mit diesem Thema - Antwort ausreichend ist, egal welche frameworks verwendet werden. Der Hinweis bleibt unverändert - der Umgang mit Fragen im Zusammenhang mit der Authentifizierung Fehler beim ausführen von ajax-Anfragen).
Den Ansatz unten gezeigt, angewendet werden können, um alle ajax-Anfragen aus der box (wenn Sie nicht neu definieren beforeSend Veranstaltung offensichtlich).
Vor jeder ajax-Anfrage durchgeführt wird
CheckPulse
Methode aufgerufen wird (der controller-Methode die alles sein kann einfachsten):Wenn der Benutzer nicht authentifiziert (token abgelaufen ist) eine solche Methode nicht zugegriffen werden kann (geschützt durch
Authorize
- Attribut). Da das framework übernimmt die Authentifizierung, während der token abläuft, es setzt den http-status 302 auf die Antwort. Wenn Sie nicht möchten, dass Ihre browser zu handhaben 302 Antwort, transparent, fängt es in der Globalen.asax und ändern der Antwort-status - zum Beispiel 200 OK. Darüber hinaus header hinzufügen, die Sie auffordert, diese Antwort in besonderer Weise (später auf der client-Seite):Schließlich auf der client-Seite prüfen, für solche custom-header. Wenn vorhanden - vollständige Umleitung auf die Anmeldeseite getan werden sollte (in meinem Fall
window.location
wird ersetzt durch die url-Anforderung, die verarbeitet wird, automatisch von meinem Rahmen).Ich klebte die falsche Veranstaltung in meiner letzten Antwort! Ich meinte die PreSendRequestHeaders Veranstaltung.....nicht PostAuthenticateRequest! >>blush<< danke für den Hinweis auf meine Fehler.
bei der Verwendung von WIF können Sie auch zurück, 401 Antworten für AJAX-Anfragen und lassen Sie Ihr javascript verarbeiten diese. Auch Sie gehen davon aus, dass alle 302 die eine Authentifizierung erfordern, die möglicherweise nicht wahr in allen Fällen. Ich habe eine Antwort, wenn jemand interessiert ist.
InformationsquelleAutor jwaliszko
Ich denke, einen besseren Weg um dies zu umgehen ist die Nutzung der vorhandenen HTTP-Protokoll response-codes, speziell
401 Unauthorized
.Hier ist, wie ich es gelöst:
Client-Seite: Bindung an die ajax-events
IMO dieses ist allgemeiner, und Sie sind nicht schriftlich einige neue custom-spec/header. Sie sollten auch nicht zu ändern Sie Ihre vorhandenen ajax-Aufrufe.
Edit: Pro @Rob ' s Kommentar unten, 401 (den HTTP-status-code für die Authentifizierung-Fehler) sollten Sie das Kennzeichen. Sehen 403 Forbidden vs 401 Unauthorized HTTP-Antworten für mehr detail. Mit diesem wird gesagt, einige web-frameworks verwenden 403 für Authentifizierungs-UND Autorisierungs-Fehler - also entsprechend anpassen. Danke Rob.
InformationsquelleAutor rynop
Ich dieses Problem behoben so:
Hinzufügen einer middleware für die Antwort, wenn es eine Umleitung für eine ajax-Anfrage, ändern Sie die Reaktion auf eine normale Antwort mit der redirect-url.
Dann in ajaxComplete, wenn die Antwort enthält umzuleiten, muss es eine Umleitung, so ändern Sie die browser-Standort.
InformationsquelleAutor Tyr
Meisten der gegebenen Lösungen eine Abhilfe, mit einem zusätzlichen header oder ein inappropiate HTTP-code. Diese Lösungen werden wahrscheinlich zu arbeiten, aber das Gefühl ein wenig "hacky'. Habe ich eine andere Lösung.
Sind wir mit WIF, die konfiguriert ist, um redirect (passiveRedirectEnabled="true") auf eine 401-Antwort. Die Umleitung ist nützlich beim Umgang mit normalen Anforderungen, aber nicht für die Arbeit AJAX-Anfragen (da Browser nicht ausgeführt, die 302/redirect).
Verwenden Sie den folgenden code in deine global.asax können Sie deaktivieren die Umleitung für AJAX-Anfragen:
Dieses ermöglicht Ihnen die Rückkehr 401 Antworten für AJAX-Anfragen, die Ihre javascript kann dann Griff durch ein Neuladen der Seite. Neuladen der Seite löst 401, die behandelt werden, die von WIF (und WIF leitet den Benutzer auf die login-Seite).
Beispiel javascript zu handhaben 401-Fehler:
InformationsquelleAutor Rob
Andere Lösung, die ich fand (besonders nützlich, wenn Sie möchten, legen Sie eine Globale Verhalten) ist die Verwendung der
$.ajaxsetup()
Methode zusammen mit derstatusCode
Eigenschaft. Wie andere hingewiesen, nicht mit einem redirect-statuscode (3xx
), verwenden Sie stattdessen eine4xx
statuscode und Griff die Umleitung client-Seite.Ersetzen
400
mit dem statuscode, die Sie behandeln möchten. Wie bereits erwähnt401 Unauthorized
könnte eine gute Idee sein. Ich benutze die400
da es sehr schwammig und ich kann die401
für bestimmte Fälle (wie falsche Anmeldedaten). Also statt der Umleitung direkt an Ihre backend zurückgeben sollte eine4xx
Fehler-code, wenn die Sitzung abläuft und Sie Ihr mit dem umleiten von client-Seite. Funktioniert perfekt für mich, auch mit frameworks wie backbone.jsWenn ich verstehe deine Frage richtig, Sie können rufen Sie die Funktion direkt nach jQuery geladen wird und bevor Sie das tun, Ihre tatsächlichen Anforderungen.
InformationsquelleAutor morten.c
Dieses problem kann auftreten, dann mit ASP.NET MVC RedirectToAction Methode. Um zu verhindern, dass die form der Anzeige der response in den div-Sie können einfach tun eine Art ajax-response filter für eingehende Antworten mit $.ajaxSetup. Wenn die Antwort enthält MVC-Umleitung Sie können die Auswertung dieses Ausdrucks auf JS-Seite. Beispiel-code für JS unten:
Wenn Daten: " - Fenster.location = '/Konto/Login"," über filter zu fangen, und zu bewerten, um die Umleitung, anstatt zuzulassen, dass die Daten angezeigt werden.
data
ist in der Antwort des Körpers oder der header?InformationsquelleAutor Przemek Marcinkiewicz
Zusammenzustellen, was Vladimir Prudnikov und Thomas Hansen sagte:
In django:
Das macht den browser behandeln die Reaktion als Erfolg, und geben Sie es zu Ihr Javascript.
InformationsquelleAutor Graham King
Habe ich eine einfache Lösung, die für mich funktioniert, keine server-code ändern...notwendig, fügen Sie einfach einen Esslöffel Muskatnuss...
Überprüfe ich die Anwesenheit von html-Tags, aber Sie können ändern Sie die indexOf-Suche für beliebige eindeutige Zeichenkette existiert in Ihrem login-Seite...
InformationsquelleAutor Timmerz
Versuchen
Legen Sie es auf der login-Seite. Wenn es geladen wurde in ein div-Element auf der Hauptseite, es wird umgeleitet, bis der login-Seite. "#Website" ist die id des div, die sich auf alle Seiten außer der login-Seite.
InformationsquelleAutor podeig
InformationsquelleAutor Priyanka
Ich dies Problem gelöst, indem Sie die folgenden in meine login.php Seite.
InformationsquelleAutor Paul Richards
Während die Antworten scheinen für Menschen arbeiten, wenn Sie mit Spring Security, die ich gefunden habe die Erweiterung LoginUrlAuthenticationEntryPoint und hinzufügen spezieller code zur Behandlung von AJAX robuster. Die meisten Beispiele abfangen alle leitet nicht nur Authentifizierungsfehler. Dies war nicht wünschenswert für das Projekt arbeite ich an. Sie finden die müssen auch verlängern ExceptionTranslationFilter und überschreiben Sie die "sendStartAuthentication" - Methode zum entfernen des caching Schritt, wenn Sie nicht wollen, dass die fehlgeschlagenen AJAX-request zwischengespeichert.
Beispiel AjaxAwareAuthenticationEntryPoint:
Quellen:
Eins, Zwei
Wenn mit Frühling und auch mit JSF, dann überprüfen Sie auch für dieses: ("partial/ajax").equalsIgnoreCase(request.getHeader("faces-request"));
Benutzer haben abgestimmt, weil Sie nicht erwähnen: (1) die erforderliche client-side mods zu erkennen Ihre Fehler-response; (2) die erforderlichen mods zu Spring-Konfiguration hinzufügen, um Ihre benutzerdefinierten LoginUrlAuthenticationEntryPoint der filter-Kette.
Deine Antwort ist ähnlich wie dieses hier von @Arpad. Bei mir hat es geklappt; mit Spring Security 3.2.9. stackoverflow.com/a/8426947/4505142
InformationsquelleAutor John
Lassen Sie mich einfach zitieren, wieder das problem wie beschrieben von @Steg
IMHO ist dies eine echte Herausforderung und wird offiziell erweitert, um den aktuellen HTTP-standards.
Glaube ich, dass die neuen Http-Standard wird eine neue status-code.
Bedeutung: derzeit
301/302
sagt dem browser, gehen Sie und Holen Sie die Inhalte der diese Anforderung an eine neuelocation
.In der erweiterten standard -, er wird sagen, dass, wenn die Antwort
status: 308
(nur ein Beispiel), dann soll der browser umleiten Haupt-Seite, um dielocation
zur Verfügung gestellt.Dass gesagt wird; ich bin geneigt, bereits imitieren dieses Zukunft Verhalten, und wenn daher ein Dokument.Umleitung wird benötigt, ich habe die server-Antworten, wie:
Wenn JS bekommt die "
status: 204
", prüft es die Existenz derx-status: 308
header, und nicht ein Dokument.redirect auf die Seite in derlocation
header.Macht das Sinn für Sie?
InformationsquelleAutor Chaim Klar
Einige finden könnten, die unten nützlich:
Ich wollte Kunden werden weitergeleitet auf die login-Seite für Ruhe-Aktion, die gesendet wird, ohne ein Autorisierungs-token. Da alle meine rest-Aktionen sind Ajax-basierte, brauchte ich eine gute Allgemeine Möglichkeit zur Weiterleitung auf die login-Seite statt, der Umgang mit der Ajax-success-Funktion.
Dies ist, was ich getan habe:
Auf jedem Ajax-request mein server wird wieder eine Json-200-Antwort "NEED TO AUTHENTICATE" (wenn der client authentifizieren muss).
Einfaches Beispiel in Java (server-Seite):
In meinem Javascript habe ich folgenden code Hinzugefügt:
Und das ist über es.
InformationsquelleAutor Tomer
in der servlet-Sie sollten
response.setStatus(response.SC_MOVED_PERMANENTLY);
zum senden der '301' xmlHttp-status benötigen Sie für eine Umleitung...
und in der $.ajax-Funktion sollten Sie nicht verwenden die
.toString()
Funktion..., nurif (xmlHttp.status == 301) {
top.location.href = 'xxxx.jsp';
}
das problem ist, es ist nicht sehr flexibel, Sie können sich nicht entscheiden, wo Sie umleiten möchten..
Umleitung durch die servlets sollte der beste Weg sein. aber ich kann immer noch nicht den richtigen Weg finden, es zu tun.
InformationsquelleAutor
Wollte ich nur Riegel auf jeder ajax-Anfragen, die für die gesamte Seite. @SuperG habe mich begonnen. Hier ist, was ich am Ende mit:
Wollte ich speziell überprüfen Sie für bestimmte http-status-codes zur Basis meiner Entscheidung. Aber, Sie können nur binden zu ajaxError zu bekommen, alles andere als ein Erfolg (200 nur vielleicht?) Ich hätte einfach geschrieben:
403 bedeutet nicht, dass der Benutzer nicht authentifiziert werden, es bedeutet, dass die (wahrscheinlich authentifizierte) Benutzer nicht über die Berechtigung zum anzeigen der angeforderten Ressource. Es sollte also nicht umleiten auf die login-Seite
InformationsquelleAutor Bretticus
Wenn Sie auch möchten, übergeben Sie die Werte dann kannst du auch das session-Variablen und Zugriff
ZB:
In Ihrer jsp schreiben Sie
Und dann können Sie speichern das temp-Wert im javascript-variable und spielen, um
InformationsquelleAutor karthik339
Ich habe keine Erfolg mit der header-Lösung - Sie wurden nie abgeholt, in meine ajaxSuccess /ajaxComplete Methode. Ich verwendet Steg Antwort mit der individuellen Reaktion, aber ich veränderte die JS-Seite. Ich setup eine Methode, die ich nenne in jeder Funktion, so kann ich verwenden-standard
$.get
und$.post
Methoden.Beispiel für Sie im Einsatz...
InformationsquelleAutor jocull
Endlich, dass ich das problem lösen, indem Sie ein benutzerdefiniertes
HTTP Header
. Nur vor der Antwort für jede Anforderung im server-Seite, ich fügen Sie die aktuelle url zum Antwort-header.Meine Bewerbung geben Sie auf dem server ist
Asp.Net MVC
, und es ist ein guter Ort, um es zu tun. inGlobal.asax
ich implementiert dieApplication_EndRequest
Ereignis so:Funktioniert es perfekt für mich! Jetzt in jeder Antwort des
JQuery
$.post
ich habe die angefordertenurl
und auch andere response-Header, die kommt als ErgebnisPOST
Methode von status302
,303
,... .und andere wichtige Sache ist, dass es keine Notwendigkeit code ändern auf der server-Seite noch die client-Seite.
und der nächste ist die Fähigkeit, sich Zugang zu den anderen Informationen, die der post-action-solche Fehler, Nachrichten und ... auf diesem Weg.
Ich dies gepostet, vielleicht helfen Sie jemanden 🙂
InformationsquelleAutor Ali Adlavaran
Ich hatte dieses problem auf eine django-app, die ich bin-basteln mit (disclaimer: ich bin das basteln zu lernen, und bin in keiner Weise ein Experte). Was ich tun wollte, war die jQuery-ajax-senden einer DELETE-Anfrage, um eine Ressource zu löschen, es auf der server-Seite, dann sendet eine redirect zurück zum (im Prinzip) der homepage. Wenn ich geschickt
HttpResponseRedirect('/the-redirect/')
aus dem python-script, jQuery, ajax-Methode erhielt 200 statt 302. Also, was ich Tat, war, eine Antwort senden, der mit 300:Dann habe ich gesendet/verarbeitet die Anforderung auf dem client mit jQuery.ajax etwa so:
Vielleicht mit 300 ist nicht "rechts", aber mindestens es funktionierte genau so wie ich es wollte.
PS :das war ein großer Schmerz, zu Bearbeiten auf der mobilen version SO. Dumm ISP meine service Stornierung durch Recht als ich fertig war mit meiner Antwort!
InformationsquelleAutor Benny Jobigan
Können Sie auch Haken XMLHttpRequest senden Prototyp. Dies funktioniert für alle sendet (jQuery/dojo/etc) mit einem handler.
Schrieb ich hier code zum behandeln einer 500-Seite abgelaufen Fehler, aber es sollte genauso gut funktionieren als Falle ein 200 umleiten. Bereit, den wikipedia-Eintrag über XMLHttpRequest onreadystatechange über die Bedeutung der readyState.
InformationsquelleAutor Curtis Yallop
Zusätzlich werden Sie wahrscheinlich wollen umleiten Benutzer zu den in Header URL. So endlich wird es wie folgt aussieht:
UPD: Upps. Haben die gleiche Aufgabe, aber es nicht funktioniert. Doing dieses Zeug. Ich zeige Ihnen die Lösung, wenn ich es finden.
InformationsquelleAutor Vladimir Prudnikov
Bekam ich eine Arbeit solulion mit den Antworten von @John und @Arpad link und @RobWinch link
Ich benutze Spring Security 3.2.9 und jQuery-1.10.2.
Verlängern Frühjahr die Klasse zu verursachen 4XX-Antwort nur von AJAX-Anfragen:
applicationContext-security.xml
In meinem JSPs, fügen Sie eine Globale AJAX-error-handler, wie gezeigt, hier
Entfernen Sie außerdem die vorhandenen Fehler-Handler von AJAX-Aufrufe in JSP-Seiten:
Ich hoffe, es hilft anderen.
Update1
Ich fand, dass ich brauchte, um die Möglichkeit (immer-use-default-target="true") der form-login-config.
Dies war nötig, da nach einer AJAX-Anfrage wird an die Anmeldeseite umgeleitet (wegen abgelaufener session), Feder, erinnert sich der frühere AJAX-Anfrage und automatische Weiterleitungen nach dem login. Dies bewirkt, dass die zurückgegebenen JSON-Anzeige auf der browser-Seite. Natürlich nicht das, was ich will.
Update2
Anstelle der Verwendung von
always-use-default-target="true"
Verwendung von @RobWinch Beispiel der Sperrung von AJAX-Anfragen aus dem requstCache. Dies ermöglicht, normale links werden umgeleitet und von Ihrem ursprünglichen Ziel nach dem login, aber AJAX gehen Sie auf der Startseite nach dem login.InformationsquelleAutor Darren Parker