Ankündigung

Einklappen
Keine Ankündigung bisher.

Informationen bei Verlassen der Seite speichern

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Informationen bei Verlassen der Seite speichern

    Guten Nachmittag,

    ich bastle derzeit an einer Seite, auf der (eingeloggte) Benutzer DIV-Tags per JavaScript verschieben können. Beim Verlassen (inkl. Logout oder F5-Aktualisierung) der Seite sollen die Positionen der DIVs gespeichert werden, damit sie bei einem erneuten Besuch wieder genau an diesen Positionen angezeigt werden.

    Nun gut, mein bisheriger Ansatz sieht so aus, dass ich mittels unload des Body-Tags eine Funktion aufrufe, die dann über ein xmlHttpObject die Positionen speichert.

    Das Problem dabei ist Folgendes: Anscheinend wird diese unload-Funktion erst aufgerufen, nachdem die neue Seite aufgebaut wurde. Das heißt, bei einer Aktualisierung der Seite werden beim erneuten Seitenaufbau erst die alten Positionen geladen und dann werden erst die aktuellen Positionen gespeichert. Ebenso schlägt das Speichern beim Logout fehl, denn auch hier wird erst das Logout-Script aufgerufen, das Speichern schlägt danach fehl, da der Benutzer eben nicht mehr angemeldet ist.

    Die Positionen direkt beim Verschieben zu speichern, halte ich für zu performancelastig und Speichern z.B. im 10 Sekunden Takt (wenn sich die Positionen geändert haben) wäre meine Notlösung, falls ich nichts besseres finde. Aber dann würden die Verschiebungen aus den letzten 10 Sekunden verloren gehen. Ich suche also eine Möglichkeit, diese Positionen zu speichern bevor eine neue Seite aufgerufen wird.

    Ich hoffe, dass mir jemand dazu Denkanstöße geben kann.


  • #2
    Die Positionen direkt beim Verschieben zu speichern
    Ajax-Request onMouseUp. So würde ich das machen. Wahlweise dabei die Daten in eine Session speichern oder sogar direkt in die DB. Ich finde es aber auch nicht sooo schlimm, vor dem Browserclose nen Speichern Button drücken zu müssen (also die Session Lösung).
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      Danke für die schnelle Antwort. Die Methode mit dem Button finde ich für den Benutzer etwas zu unkomfortabel. onMouseUp klingt nicht schlecht, kann im Zweifelsfall aber auch recht oft aufgerufen werden. Eine Idee, die ich noch hatte war, dass ich direkt nach dem Seitenaufruf (onload) die aktuellen Positionen (wieder mit xmlHttpObject) nachlade. D.h. beim Neuladen wird die Seite erst mit den alten Positionen geladen, lädt aber sofort die neuen nach.
      Die Idee hatte ich zwar verworfen, da sie das Logout-Problem nicht löst. Aber mir ist gerade eingefallen, dass ich das Abmelden ja auch über eine JS-Funktion machen kann, welche dann erst die Positionen speichert und dann erst zum Logout-Script weiterleitet. So habe ich das jetzt mal implementiert und es funktioniert auch. Ist zwar meiner Meinung nach sehr unschön, dass Dinge direkt beim onLoad schon nachgeladen werden, aber es gibt eben nicht so viel unnötigen Zwischentransfer wie bei der onMouseUp-Variante.
      Also falls jemandem noch eine bessere Lösung einfällt, bitte posten. Ansonsten mach ich's so wie eben beschrieben.
      Noch mal danke für die Antwort.

      Kommentar


      • #4
        Hmm, Du diskutierst hier zwei Probleme. Meine Aussage bezog sich auf das Zwischenspeichern der Position. Ich sehe eine Session-Lösung eigentlich recht unproblematisch. Wenn da jetzt jemand Dauerfeuer am Klickfinger spielt, klar, dann kann das Problematisch sein. Ansonsten löst eine Session Dein Problem mit der Positionsübernahme auf die nächste Seite, ist vermutlich performanter als ein DB-UPDATE und notfalls kannst Du onUnload die Sessiondaten (versuchen) in die DB (zu) schreiben.

        Die Methode mit dem Button finde ich für den Benutzer etwas zu unkomfortabel.
        Kann man auch anders sehen. Wenn man jetzt was hin- und herschiebt und merkt, dass das Layout vorher viel praktischer war, steht man doof da. Zudem ist ein Save-Button doch allgemein bekannt in User Interfaces.
        Ebenso ginge der typische Save / Cancel Dialog onUnload.
        --

        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


        --

        Kommentar

        Lädt...
        X