Olee: Permalinks und Ajax

hallo,

ich möchte mir ein einfaches ajax framework bauen. kurz:

1. ich möchte inhalte dynamisch nachladen ohne das die gesamte seite neu geladen werden muss. (wenn js aktiviert ist)

2. bei deaktiviertem js möchte ich eine gewöhntliche seite, die gänzlich neu geladen wird

3. in beiden fällen sollen in der adresszeile ständig permalinks zurückgegeben werden (in der non-js und in der js version). also sowohl der back-button, als auch bookmarks, als auch link an freund per icq schicken muss funktionieren

ist das möglich?

meineseite.de#unterseite2
mit location.hash kann man ankerlinks herauszufinden um den gewünschten inhalt zu öffnen, leider kann php diesen wert nicht auslesen. (oder?)

meineseite.de/unterseite2
mit php kann man dem user unterverzeichnisse vorgaukeln wo keine sind. leider kann man dieses 'unterverzeichniss' in der adresszeile via js nicht ändern ohne tatsächlich in eine andere seite zu springen. (oder?)

also, so wie es scheint gibt es keine saubere, optimale lösung für alle probleme die diese technik mit sich bringt, oder?

  1. Hi,

    meineseite.de#unterseite2
    mit location.hash kann man ankerlinks herauszufinden um den gewünschten inhalt zu öffnen, leider kann php diesen wert nicht auslesen. (oder?)

    korrekt. Aber JavaScript kann.

    meineseite.de/unterseite2
    mit php kann man dem user unterverzeichnisse vorgaukeln wo keine sind. leider kann man dieses 'unterverzeichniss' in der adresszeile via js nicht ändern ohne tatsächlich in eine andere seite zu springen. (oder?)

    Korrekt.

    also, so wie es scheint gibt es keine saubere, optimale lösung für alle probleme die diese technik mit sich bringt, oder?

    Nicht wirklich. Allerdings sehe ich nicht, warum Du aus Deinen Erkenntnissen keine ziemlich gute Lösung generierst, die fast alle Probleme mit dieser Technik löst.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. kennst du ein paar gute Lösungen dafür?

      1. Hi,

        kennst du ein paar gute Lösungen dafür?

        mir schwebt nichts vor, was sich nicht bereits aus Deinem Ausgangsposting herauslesen lässt.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
  2. Hallo,

    die Theorie hast du soweit schon hinreichend dargestellt, wo hapert es denn bei der Umsetzung? Beim Laden der Seite musst du location.hash auslesen und, sofern gesetzt, die entsprechende Seite laden. Innerhalb der Anwendung musst du location.hash »überwachen«, also regelmäßig auf Änderungen prüfen. IE 8 hat für diesen Zweck übrigens einen Event namens onhashchange. Sobald du eine Änderung feststellst (Vergleich mit dem vorigen, zwischengespeicherten Wert), lädst du den entsprechenden Code nach. Sinnigerweise speichert man ihn zwischen oder sorgt für Caching, denn beim Betätigen der Zurück-Taste muss der Code ja nicht neu vom Server geholt werden. Aber damit sage ich dir wahrscheinlich nichts neues, oder?

    mit location.hash kann man ankerlinks herauszufinden um den gewünschten inhalt zu öffnen, leider kann php diesen wert nicht auslesen. (oder?)

    Wie gesagt hat PHP damit nichts zu tun, das kannst du nur clientseitig behandeln.

    meineseite.de/unterseite2
    mit php kann man dem user unterverzeichnisse vorgaukeln wo keine sind. leider kann man dieses 'unterverzeichniss' in der adresszeile via js nicht ändern ohne tatsächlich in eine andere seite zu springen. (oder?)

    Nein, diese URI würde auch in dem Fall genutzt, dass JavaScript nicht verfügbar ist (also der Fallback bei <a href="statischeURI" onclick="machsMitJavaScript(); return false">).

    also, so wie es scheint gibt es keine saubere, optimale lösung für alle probleme die diese technik mit sich bringt, oder?

    Es gibt einige Frameworks, die das Problem der History zu lösen versuchen, sodass der Back-Button hinreichend funktioniert.

    Mathias

    1. Yerf!

      die Theorie hast du soweit schon hinreichend dargestellt, wo hapert es denn bei der Umsetzung?

      Ich befürchte es liegt bei der Kombination der dargestellten Ansätze, so dass dabei *alle* gestellten Bedingungen erfüllt sind. Ich sehe da gerade aber auch keinen Weg...

      Beim Laden der Seite musst du location.hash auslesen und, sofern gesetzt, die entsprechende Seite laden. Innerhalb der Anwendung musst du location.hash »überwachen«, also regelmäßig auf Änderungen prüfen.

      Dies geht aber nur mittels JS. Ein Link mit einem Hash ist somit als Perma-Link nicht brauchbar, da dieser nur in die JS-only Version führt...

      Eine JS-lose Version mittels Path-Info ist zwar schön, aber nicht mit der AJAX-version kombinierbar, da durch das ändern der URL der Browser neu läd...

      mit php kann man dem user unterverzeichnisse vorgaukeln wo keine sind. leider kann man dieses 'unterverzeichniss' in der adresszeile via js nicht ändern ohne tatsächlich in eine andere seite zu springen. (oder?)

      Nein, diese URI würde auch in dem Fall genutzt, dass JavaScript nicht verfügbar ist (also der Fallback bei <a href="statischeURI" onclick="machsMitJavaScript(); return false">).

      Das funktioniert für Links innerhalb der Seite, aber nicht, wenn man die URL aus der Adresszeile kopiert und weitergibt.

      also, so wie es scheint gibt es keine saubere, optimale lösung für alle probleme die diese technik mit sich bringt, oder?

      Es gibt einige Frameworks, die das Problem der History zu lösen versuchen, sodass der Back-Button hinreichend funktioniert.

      Ich denke aber mal, dass diese einfach JS voraussetzen um Probleme zu umgehen (oder sich nicht um die Problematik der Perma-Links kümmern...)

      Hm, was mir noch einfällt... keine AHnung obs nur ne blöde Idee ist:

      Wenn man in der Session ablegt, dass der Browser JS kann könnte man doch alle Folgeabfragen die eine Path-Info haben mit "no content" beantworten. Dadurch sollte der Browser die Seite doch nicht neu aufbauen wenn man die URL ändert, oder?

      Gruß,

      Harlequin

      --
      <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
      1. Hallo,

        Ein Link mit einem Hash ist somit als Perma-Link nicht brauchbar, da dieser nur in die JS-only Version führt...

        Ja. Wenn der JS-Link von einem Client aufgerufen wird, der kein JS interpretiert, hat man Pech.

        So ist das halt mit Ajax. Bei HTTP und HTML ohne clientseitiges Gedöhns gibt es permanente »Ressourcen«, die eindeutig durch URIs identifizierbar sind. Wenn man zwischendrin mit JavaScript Änderungen vornimmt, kann man keine richtige URI für dieses dynamisch abgeänderte Dokument bereitstellen. Das führt zu verschiedenen Problemen, weil das Web eben auf URIs aufbaut.

        Das funktioniert für Links innerhalb der Seite, aber nicht, wenn man die URL aus der Adresszeile kopiert und weitergibt.

        So ist es. Das Problem wirst du auch nicht lösen können, das ist konzeptionell.

        könnte man doch alle Folgeabfragen die eine Path-Info haben mit "no content" beantworten. Dadurch sollte der Browser die Seite doch nicht neu aufbauen wenn man die URL ändert, oder?

        Ja, aber die URI in der Browser-Adresszeile ändert sich dann meines Wissens auch nicht.

        Mathias