Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Info doorgeven bij site reload

Pagina: 1
Acties:

  • SvMp
  • Registratie: September 2000
  • Niet online
Ik heb twee situaties waarbij ik informatie wil doorgeven bij het reloaden van een site, maar ik loop tegen problemen aan.

Stel ik heb een tabel met producten in de database en ik bouw een back-office voor het invoeren van producten.

Situatie 1:

Ik voer een nieuw product in, via de link /admin/product/nieuw
Ik vraag naar enkele basisgegevens.
Met JavaScript en Ajax stuur ik de ingevoerde gegevens naar de server. Als alles goed is, krijg ik een id terug van het aangemaakte product. Er vindt (via Javascript)) een redirect aan naar /admin/product/<id> waar ik een overzicht zie van de gegevens en de mogelijkheid krijg om gegevens aan te vullen.

Ik wil nu het volgende: Als je bij /admin/product/<id> komt direct na het invoeren van een nieuw product, wil ik een divje bovenin hebben waar een melding in staat "Product <naam> toegevoegd aan database. Je kunt eventueel aanvullende gegevens invoeren."

Vraag: Hoe kan ik dat doen? Ik kan natuurlijk een get-variabele toevoegen aan de URL, bijvoorbeeld "isnieuw=ja", maar dat vind ik niet zo mooi. Iemand kan dan namelijk handmatig de URL aanpassen om die melding te krijgen, ook als producten er al staan.

Wat ik nu heb gemaakt is dat de melding in de sessie wordt bewaard. Bij weergave wordt deze onmiddellijk uit de sessie gehaald, waardoor de melding niet opnieuw verschijnt. Als iemand echter met meerdere browservensters tegelijk bezig is, dan kan de melding verschijnen in een heel ander browservenster. Hoewel de kans daarop klein is, vind ik die methode via de sessie niet echt mooi.

Wat ik eigenlijk nodig heb is een Javascript-variabele die zijn waarde blijft houden na het laden van een nieuwe pagina, maar die enkel geldt in één bepaald browservenster. Is dat er? Is er misschien een techniek die ik over het hoofd zie?

Situatie 2:

Ik heb een pagina met een overzicht van alle aanwezige producten in een tabel. Uiteraard kan ik zoeken op trefwoorden. Update tabel n.a.v. andere zoektermen doe ik met Ajax.

Ik wil echter dat die zoektermen worden onthouden, als de gebruiker op F5 drukt. Dat kan in een sessie, maar dan zit je ook weer met de kwestie van meerdere browservensters. ID's genereren als get-var vind ik ook niet zo fijn, want die kun je ook dupliceren.

Ik wil de URL in de adresbalk veranderen (get-vars aanpassen) zonder reload. Volgens mij kan dat niet.
Zijn er nog alternatieven?

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-11 09:49

Bosmonster

*zucht*

1. Je maakt je druk op dat mensen de url kunnen aanpassen voor een verder functieloze melding? Ik zou me daar niet zo druk om maken, maar als je dat wel doet kun je het altijd nog combineren met je tweede oplossing: de sessie. De melding via de url alleen tonen als die ID ook in de sessie staat aangegeven als nieuw.

2. Dit wordt meestal opgelost met de location-hash (of history api in modernere browsers). Eigenlijk hetzelfde principe dus waarop veel apps gebaseerd zijn, zoals de pricewatch van Tweakers. Voordeel is dat je dan naar hartelust kunt refreshen, bookmarken, doorsturen of de back-button gebruiken, zelfs al doe je alles met AJAX. Makkelijkste hiervoor is een standaard Javascript Router te pakken (een hele eenvoudige is bijvoorbeeld routie)

[ Voor 21% gewijzigd door Bosmonster op 08-03-2013 16:13 ]


  • SvMp
  • Registratie: September 2000
  • Niet online
Dank voor je reactie! Die location-hash is een prima oplossing, een techniek die ik over het hoofd heb gezien.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 22-11 13:46

Janoz

Moderator Devschuur®

!litemod

Beide problemen zijn trouwens ook simpel op te lossen door niet ajax te gebruiken, maar gewoon normaal formulieren te submitten.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'