Laden...

Aktualisierung der Adresszeile bei AJAX-Request

Erstellt von Abt vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.879 Views
Abt Themenstarter:in
16.842 Beiträge seit 2008
vor 13 Jahren
Aktualisierung der Adresszeile bei AJAX-Request

Hallo zusammen,

zu aller erst: meine Applikationsumgebung ist ASP.NET MVC2 in Zusammenarbeit mit jQuery.

Wie's bei den meisten RIAs der Fall ist, verwende auch ich Ajax, um nur einzelne Bestandteile der Seite zu laden. Für den Workflow einiger Bereiche, deren Ladezeiten beim ersten Aufruf ein paar/10 Sekunden dauern kann, ist dies auch absolut von Nöten - zu optimieren ist hier leider nicht mehr viel.
Um dem Anwender aber die Möglichkeit zu geben, die Ajax-Auswahl einfach einem anderen Benutzer zukommen zu lassen, würde ich gerne die URL aktualisieren, sprich Elemente des Query-Strings (er)setzen.

Da mir Javascript augenscheinlich nur .location.href (leider inklusive Reload) und .location.href (leider nur ein Anker) setzen kann schwebe ich ein wenig in der Luft, wie ich die URL, die ich per Ajax-Aufrufe, in die Browserzeile setzen kann. Im Controller selbst erkenne ich, ob es ein Ajax-Aufruf ist oder nicht und kann dementsprechend reagieren.

Lange Rede kurzer Sinn: ich suche eine Möglichkeit die Browser-Adresszeile zu aktualisieren, ohne dass die gesamte Seite neu geladen wird, wie es zum Beispiel auch bei Facebook der Fall ist ( ex. Bildergalerien ). oder Alternativen.
Dass das direkte Setzen der Browseradresszeile aus Sicherheitsgründen ohne Reload nicht geht ist mir bekannt. HTML 5 Möglichkeiten scheiden aufgrund der Browser-Vorgabe (IE7/8) aus.

Danke für Ideen.

S
167 Beiträge seit 2008
vor 13 Jahren
Abt Themenstarter:in
16.842 Beiträge seit 2008
vor 13 Jahren


>

Was mein Problem absolut nicht löst, oder was genau willst Du mir sagen? Google ist mir eine geläufige Seite 🤔 Ein paar Worte Deinerseits über die Anwendung dessen würde sicherlich nich Schaden, als nur den Google-Link zu präsentieren...

Ich will, dass die Adresszeile aktualisiert wird, sodass der Anwender (a) den Link mitten im Workflow kopiert werden kann und Anwender (b) die identische Seite erhält.... dies js aber nativ nicht ohne Reload unterstützt.
Bisher ist es gelöst über das Setzen des Clipboards was die Workability aber nich wirklich fördert... 🙄

B
200 Beiträge seit 2006
vor 13 Jahren

Google Übersetzer arbeitet genau so...

http://translate.google.ch/translate_t?hl=&ie=UTF-8&text=helo&sl=en&tl=de**#en|de|hello**

Das Fragmet "#" kann Serverseitig soviel ich weiss nicht abgefragt werden. Hier musst du eben bei jedem body onload das Fragment auswerten und einen AJAX Request absetzten.

S
167 Beiträge seit 2008
vor 13 Jahren
Abt Themenstarter:in
16.842 Beiträge seit 2008
vor 13 Jahren

Google Übersetzer arbeitet genau so...

>

Das Fragmet "#" kann Serverseitig soviel ich weiss nicht abgefragt werden. Hier musst du eben bei jedem body onload das Fragment auswerten und einen AJAX Request absetzten.

Wie bereits erwähnt suche ich eine Variante ohne Anker (# -> document.location.hash), eben wegen der Möglichkeit diese am Controller auswerten zu können. Ich möchte/muss mit den Controllern arbeiten. Die Seite Aufrufen und dann über $(document).ready() den Anker abfragen.. finde ich eine unschöne Lösung, da ich hier zu eine weitere Fehlerquelle habe und mehrere "unnötige" Requests am Server auslöse - das wäre die aller letzte Lösung, wenn es wirklich keine andere Möglichkeit gibt.

Da hilft mir auch der erste Link der Google Suche nicht, da meine Links dynamisch entstehen können und somit das Zusammenbauen der URL durch JavaScript nicht infrage kommt.

PushState(), wie es auch HTML 5 ünterstützt und jQuery hier "nur" simuliert, bringt mir ebenfalls überhaupt nichts, da die Möglichkeit der Navigation über die History bei der Adressaktualisierung ebenfalls möglich ist, für mich aber nur das einfache Kopieren der URL - ohne Anker - interessant ist.

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

Um dem Anwender aber die Möglichkeit zu geben, die Ajax-Auswahl einfach einem anderen Benutzer zukommen zu lassen

muss es denn dafür unbedingt die Addresszeile sein? Könntest ja alternativ einen gültigen Link auf die aktuelle Ansicht (Permalink) gnerieren und auf der Seite ausgeben.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

Abt Themenstarter:in
16.842 Beiträge seit 2008
vor 13 Jahren
Hinweis von MarsStein vor 13 Jahren

Bitte keine Full Quotes - Zitat entfernt

Man gibt sich manchmal nur mit der besten Möglichkeit zufrieden 😉
Es muss allerdings eine Möglichkeit geben. Ich habe noch nicht ganz herausgefunden, wie Facebook das hin bekommt, aber es geht ja augenscheinlich.
Daran zu erkennen, dass der markierte Text nicht neu geladen wird, die URL sich aber ändert.

Bin nur noch nicht dahinter gekommen, wie das funktioniert, daher hatte ich auf Tipps gehofft.

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

Daran zu erkennen, dass der markierte Text nicht neu geladen wird, die URL sich aber ändert.

Bin nur noch nicht dahinter gekommen, wie das funktioniert, daher hatte ich auf Tipps gehofft.

schau doch mal in den HTTP-Verkehr.
Möglicherweise wird ja doch ganz normal ein Request ausgeführt, und derServer liefert ein

304 Not Modified

weil er erkennt daß die Anfrage gerade schon gestellt wurde.
Auch wenn das dort nicht so gemacht wird, wäre es vielleicht für Dich eine Möglichkeit.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

Abt Themenstarter:in
16.842 Beiträge seit 2008
vor 13 Jahren

und derServer liefert ein

304 Not Modified  

Auch wenn das dort nicht so gemacht wird, wäre es vielleicht für Dich eine Möglichkeit.

Ich versteh die Lösungsmöglichkeit nicht.

Wenn ich ein Ajax-Request werfe und 304 als Status zurück erhalte, resultiert dies in keinem Unterschied. Der Partial-Content wird trotzdem geladen - wie gewollt (interessiert jQuery anscheinend nicht, Status ist allerdings gesetzt).
Rufe ich die Worflow-Seite nun direkt auf und erhalte u.a. den 304er Status, dann seh ich (im IE7) nur ne leere Seite, habe jedoch HTML-Content erhalten; wird nur nicht angezeigt.

Ich vermute ich muss ein wenig Zeit in Facebook stecken... 🙁