2013-05-02 5 views
9

Wenn ich Anfragen an einen bestimmten Server senden, wird eine 303 Antwort kommen, gefolgt von der angeforderten Antwort in Kombination mit einem 200 Statuscode. Lustig ist, dass ich das nur in der Netzwerkansicht meiner Entwicklerkonsole sehe. Wenn ich den Statuscode und die Antwort meiner $ .ajax() - Anfrage überprüfe, gibt es die Antwort der zweiten Anfrage, sowie einen 200 http Statuscode.Reagieren auf 303 Statuscode in jquery (Umleiten verhindern)

Das Problem ist, dass es scheint, dass die zweite Anfrage im Cache gespeichert wird (obwohl 200 Statuscode), und ich brauche es wirklich nicht cachable. Daher möchte ich wirklich in den Weiterleitungsprozess eingreifen, der mit einem http 303 Statuscode auftritt. Ich möchte, dass meine jquery-Funktion nach dem Statuscode sucht und dann die get-Anforderung mit expliziten Headern sendet, die den Server anweisen, die Antwort nicht zwischenzuspeichern.

Nun, ich weiß nur nicht, wie dies zu tun ist, da (wie oben erwähnt) die jQuery.ajax-Methode mit der Antwort und dem Statuscode der weitergeleiteten Anfrage (200) antwortet.

Können Sie mir helfen?

bearbeiten

10.3.4 303 See Other

Die Antwort auf die Anfrage kann unter einem anderen URI gefunden werden und sollte eine GET-Methode auf die Ressource abgerufen werden. Diese Methode existiert hauptsächlich, um die Ausgabe eines POST-aktivierten Skripts an zu ermöglichen, um den Benutzeragenten an eine ausgewählte Ressource umzuleiten. Der neue URI ist kein Ersatzreferenz für die ursprünglich angeforderte Ressource. Die 303 Antwort darf nicht zwischengespeichert werden, aber die Antwort auf die zweite Anfrage (umgeleitet) könnte zwischenspeicherbar sein.

vielleicht muss ich irgendwie den User-Agent verhindern, sich von Umleitung, so kann ich die Umleitung tun?

Oder gibt es eine Möglichkeit, dem Server/Browser einfach mitzuteilen, dass er die zweite Anfrage von der Client-Seite nicht zwischenspeichern soll? oder um zu verhindern, dass meine Anfrage umgeleitet wird? oder zumindest die zweite Anfrage vor dem Weiterleiten modifizieren?

+0

Ich habe keinen Zugriff auf den Server außer HTTP-Anfragen – keinabel

Antwort

8

Antworten in dem 300-Bereich sollen transparent sein. AFAIK, Webbrowser stellen keine von ihnen dem Javascript aus. Daher ist die Handhabung des 303 keine Option.

Haben Sie versucht, die cache Eigenschaft auf false in der ajaxSetup Einstellung? Er fügt der Anforderung einen Zeitstempel hinzu und verhindert, dass der Browser die Antwort zwischenspeichert. Sie können das auch manuell selbst machen. Der Browser sollte der ersten Anfrage-URL der 2. Antwort entsprechen

+0

siehe http://www.w3.org/TR/XMLHttpRequest/#same-origin-request-event-rules – yoelp

+0

Dies half mir zu verstehen, warum IE Antwortkörper für eine 303 JS nicht zurückgibt (obwohl Chrome tut). Vielen Dank! –

-1

Siehe statusCode Eigentum Ihres .ajax() Anruf

Beispiel:

$.ajax({ 
    statusCode: { 
    303: function() { 
     alert("page not found"); 
    } 
    } 
}); 
+4

wie ich sagte: "_When Überprüfung der Statuscode und Antwort meiner $ .ajax() Anfrage wird es die Antwort der zweiten Anfrage, sowie eine 200 http status code._ ".. das gleiche gilt für diesen Ansatz. Ich versuchte es mit $ Schnipsel ({ status: { 303: function() { alert (303); }, 200: function() { alert (200); } } }); es springt immer in die 200-Methode. – keinabel

+0

Gibt es eine Lösung, wie man die Daten der 303 Antwort erhält? – user3206010

2

Sie cannot stop the browser from following the 303 redirect. Es hört sich so an, als ob das nicht das ist, was du willst. Was auch immer Sie im Browser tun würden, um zu verhindern, dass die ursprüngliche Anforderung zwischengespeichert wird, sollte genauso gut funktionieren, um zu verhindern, dass die umgeleitete 200 zwischengespeichert wird. Abgesehen davon, dass Sie für jede Anfrage eine eindeutige URL verwenden, können Sie auf der Seite des Browsers wenig tun. Dies geschieht automatisch für Sie durch jQuery, wenn Sie cache: false festlegen.

$.ajax({ 
    url: "example.html", 
    cache: false 
    } 
}).done(function(html) { 
    $("#results").append(html); 
}); 
0

Dies ist eine alte Post, aber vielleicht wird jemand das nützlich finden.

Ich habe das gleiche Problem, und in meinem Fall war das Problem in der Methode, die mit dem Ajax aufgerufen wurde. Das Problem lag in der Umleitung, die in der Methode festgelegt wurde. Also, basierend darauf können Sie nicht sowohl Ajax und Redirect (Server-Seite) verwenden, und ich entfernte redirect() Funktion von der Methode, ich alles funktioniert wie erwartet. Btw, ich benutze codeigniter.