login  Naam:   Wachtwoord: 
Registreer je!
 Forum

AJAX - ingevulde waarde onthouden bij terugkeren naar vorige pagina (Opgelost)

Offline Ruultje - 03/02/2011 12:04
Avatar van RuultjeNieuw lid Ik kom terug op dit bericht:
http://www.site..._database_(ID)_gegevens_oproepen_zonder_pagina_refresh_

Deze werkt perfect. Maar ik zit met het volgende probleem. Ik kies hierin eerst een bepaalde waarde. Deze waarde laat dan diverse formuliervelden zien. Nu treden de volgende problemen op waar ik ook geen oplossing voor vind:

- Wanneer ik de pagina aanpas in de code moet ik de site eerst sluiten voordat ik een verandering kan zien wanneer ik de geselecteerde waarde al eens heb bekeken. Is het mogelijk dat hij gewoon 'up to date' blijft zonder dat ik eerst de site moet sluiten?

- Wanneer het formulier is ingevuld en ik keer (via terug naar vorige pagina) weer terug naar het formulier dan is het formulier weer gesloten en moet ik eerst de juiste waarde weer selecteren. En daarna alles weer opnieuw ingeven. Hoe kan ik er voor zorgen dat de pagina en de ingevulde waarden onthouden blijven?

Ik kom er geen wijs uit momenteel.

17 antwoorden

Gesponsorde links
Offline Beirensg - 03/02/2011 12:32
Avatar van Beirensg HTML beginner Het eerste ligt denk aan de cache van de browser; Dit kan je oplossen door in de header te specifieren dat deze geen cache aanvaardt:
<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
en
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
zorgen hiervoor.

Nu het tweede probleem: "terug naar vorige pagina", is dat een link op je site?, anders kan je ervoor zorgen dat hij naar de vorige pagina gaat en de ingevulde gegevens post, hierna kan je deze in een cookie plaatsen via php.
Indien je echter de terugknop in de browser bedoelt, ga je met JavaScript dit moeten herkennen, en juist voor het sluiten nog de gegevens meegeven. Maar dit lijkt mij al veel ingewikkelder.
Offline Ruultje - 03/02/2011 13:29
Avatar van Ruultje Nieuw lid Met de cache ga ik eens proberen.

Nee nu ga ik via de browser terug. Maar wil wel een een link zetten op de site. Cookies heb ik niet aan gedacht. Zal deze methode daarop ga toepassen. Blijft dan ook het opengeklapte formulier open? Nu is het zo dat hij 'gesloten' is en ik de waarde nog eens moet selecteren zodat hij weer uitklapt (zeg maar).
Offline Beirensg - 03/02/2011 14:19
Avatar van Beirensg HTML beginner het javascriptevent dat bekijkt wanneer je de pagina verlaat is onUnload. In dit event kan je nog de gegevens in postvariabeles of cookies plaatsen. Zelf heb ik dit event nog niet gebruikt, maar het lijkt mij mogelijk.
Offline Ruultje - 03/02/2011 20:50
Avatar van Ruultje Nieuw lid Bedankt zal dit eens gaan uitzoeken.

Met de cache wilde trouwens niet werken. Ik werk nu wel vanuit Localhost, ik weet niet of dat een probleem kan opleveren?
Offline Beirensg - 07/02/2011 08:47
Avatar van Beirensg HTML beginner Localhost zal normaal geen problemen geven. Maar wat dan wel het probleem geeft, is mij onbekend.
Kan je eens de code uploaden.
Offline Ruultje - 07/02/2011 14:06
Avatar van Ruultje Nieuw lid Ik weet even niet of dit de juiste is:

  1. function createHTTPHandler()
  2. {
  3. httphandler = false;
  4. // branch for native XMLHttpRequest object
  5. if(window.XMLHttpRequest)
  6. {
  7. try
  8. {
  9. httphandler = new XMLHttpRequest();
  10. } catch(e)
  11. {
  12. httphandler = false;
  13. }
  14. // branch for IE/Windows ActiveX version
  15. }
  16. else if(window.ActiveXObject)
  17. {
  18. try
  19. {
  20. httphandler = new ActiveXObject("Msxml2.XMLHTTP");
  21. } catch(e)
  22. {
  23. try
  24. {
  25. httphandler = new ActiveXObject("Microsoft.XMLHTTP");
  26. } catch(e)
  27. {
  28. httphandler = false;
  29. }
  30. }
  31. }
  32. return httphandler;
  33. }
Offline Beirensg - 07/02/2011 14:31
Avatar van Beirensg HTML beginner Dit is je XMLHttpRequest (of active X object voor oude versies van IE), deze functie maakt er 1 aan, en zou geen problemen mogen geven.

Maar kan je je volledige php-file niet eens uploaden. Werk je bvb met sessions? hoe ziet je sitestructuur er uit, hebben alle pagina's de juiste headers...?

BTW dit gaat enkel over het eerste probleem.

Het tweede probleem moet je oplossen met het onUnload event, tijdens dit event verzamel je de gegevens van de gebruiker (in JavaScript) en schrijf je deze weg naar een Cookie bvb (dewelke maar enkele uren/dagen geldig is - het onthouden van de formuliern, gedurende een jaar is misschien overdreven ). Bij het openen van de pagina, kijk je of er iets in de cookie staat, en schrijf je deze naar de respectievelijke inputvelden.
Offline Ruultje - 07/02/2011 15:09
Avatar van Ruultje Nieuw lid Werk niet met Sessions in ieder geval.

Zal in ieder geval het onUnload event gaan bekijken.


Hier de index.php
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3.  
  4. <head>
  5. <?php
  6. // Database Connectie
  7. include("connect/config.php");
  8. // Include voor de uitvoer (standaardzaken) van de website
  9. include("includes/uitvoer.php");
  10. ?>
  11. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  12. <title>Database</title>
  13.  
  14. <!-- Begin CSS -->
  15. <link rel="stylesheet" href="stylesheets/general.css" type="text/css" media="screen" />
  16. <link rel="stylesheet" href="stylesheets/forms.css" type="text/css" media="screen" />
  17. <link rel="stylesheet" type="text/css" media="print" href="stylesheets/print.css" />
  18. <link rel="stylesheet" type="text/css" href="stylesheets/jquerycssmenu.css" />
  19. <!-- End CSS -->
  20.  
  21. <!--[if IE]>
  22. <link rel="stylesheet" type="text/css" href="stylesheets/ie.css" />
  23. <![endif]-->
  24.  
  25. <!--[if lte IE 7]>
  26. <style type="text/css">
  27. html .jquerycssmenu{height: 1%;}
  28. </style>
  29. <![endif]-->
  30.  
  31. <!-- Begin Ajax -->
  32. <script type="text/javascript" src="ajax/test.js"></script>
  33. <!-- End Ajax -->
  34.  
  35. <!-- Begin Javascripts -->
  36. <script language="javascript" src="javascripts/rd.js"></script>
  37. <script language="javascript" src="javascripts/extravelden.js"></script>
  38. <script language="javascript" src="javascripts/calendar.js"></script>
  39. <script type="text/javascript" src="javascripts/jquerycssmenu.js"></script>
  40. <script type="text/javascript" src="javascripts/waarden.js"></script>
  41. <script type="text/javascript" src="javascripts/tekort.js"></script>
  42. <script type="text/javascript" src="javascripts/toggle.js"></script>
  43. <!-- End Javascripts -->
  44.  
  45. <!-- Scrap Number Javascript end -->
  46. </head>
  47. <body>
  48. <div class="website">
  49. <div class="kopsite">
  50. <div class="headerl"> </div><div class="header"> </div><div class="headerr"> </div>
  51. </div>
  52. <div class="spacer"> </div>
  53. <div class="menu">
  54. <div id="myjquerymenu" class="jquerycssmenu">
  55. <ul>
  56. <?php
  57.  
  58.  
  59. // Menu
  60.  
  61. if ($menurang == 2) // Gebruiker is admin
  62. {
  63. $sql_menu = "SELECT menu_id, menu_name, menu_link, menu_rang, menu_levels FROM menu ORDER BY menu_position";
  64. $result_menu = mysql_query($sql_menu);
  65. }
  66. else // Gebruiker is moderator
  67. {
  68. $sql_menu = "SELECT menu_id, menu_name, menu_link, menu_rang, menu_levels FROM menu WHERE menu_rang = '$menurang' ORDER BY menu_position";
  69. $result_menu = mysql_query($sql_menu);
  70. }
  71.  
  72. while ($row_menu = mysql_fetch_array($result_menu))
  73. {
  74.  
  75. // Lees submenu ID
  76. $subid = $row_menu['menu_id'];
  77. $menulink = $row_menu['menu_link'];
  78.  
  79.  
  80.  
  81. // Menu opmaak
  82. if ($row_menu['menu_levels'] == 0) // Subitems aan menu
  83. {
  84. ?>
  85. <li><a href="index.php?content=<?php echo $row_menu['menu_link']; ?>"><?php echo $row_menu['menu_name']; ?></a></li>
  86. <?php
  87. }
  88. else //
  89. {
  90. ?>
  91. <li><a href="index.php?content=<?php echo $row_menu['menu_link']; ?>"><?php echo $row_menu['menu_name']; ?></a>
  92. <ul>
  93. <?php
  94. if ($menurang == 2) // Gebruiker is admin
  95. {
  96. $sql_submenu = "SELECT ms_name, ms_link FROM menu_sub WHERE ms_menuid = '$subid' ";
  97. $result_submenu = mysql_query($sql_submenu) or die (mysql_error());
  98. }
  99. else // Gebruiker is moderator
  100. {
  101. $sql_submenu = "SELECT ms_name, ms_link FROM menu_sub WHERE ms_menuid = '$subid' AND ms_rightid = '$menurang'";
  102. $result_submenu = mysql_query($sql_submenu) or die (mysql_error());
  103. }
  104. while ($row_submenu = mysql_fetch_array($result_submenu))
  105. {
  106. ?>
  107. <li><a href="index.php?content=<?php echo $row_submenu['ms_link']; ?>"><?php echo $row_submenu['ms_name']; ?></a></li>
  108. <?php
  109. }
  110. ?>
  111. </ul>
  112. </li>
  113. <?php
  114. // sluit tweede while
  115. }
  116. // sluit eerste while
  117. }
  118. ?>
  119. </ul>
  120. <br style="clear: left" />
  121. </div>
  122. </div>
  123. <div class="main">
  124. Include Files (main.php 'bekijkt' deze
  125. </div>
  126. <div class="footer"> Date: <?php echo date("l d F Y"); ?> || Week: <?php echo date("W"); ?>
  127. <?php
  128. // Ingelogd
  129. if ($username == "")
  130. {
  131. // Toon niks
  132. }
  133. else
  134. {
  135. ?>
  136. || Ingelogd als: <?php echo ucfirst($username); ?>
  137. <?php
  138. }
  139. ?>
  140. </div>
  141. </div>
  142. </body>
  143. </html>


Dit is de main.php
  1. <?php
  2. $path = 'content/';
  3. $default_page = 'home';
  4. $beginpagina = 'index';
  5.  
  6. $page = isset( $_GET['content'] ) ? $_GET['content'] : $default_page;
  7. $notallowed = array( '.', '\\', '/' );
  8.  
  9. if( file_exists( $path . $page . '.php' ) and !in_array( substr( $page, 1, 1 ), $notallowed ) and strpos( $page, '../' ) === false and strpos( $page, '..\\' ) === false )
  10. {
  11. include( $path . $page . '.php' );
  12. }
  13. else
  14. {
  15. include( $path . $beginpagina . '.php' );
  16. }
  17. ?>


Dit is de includes/uitvoer.php

  1. <?php
  2. // Includes
  3. include ("classes/tc_calendar.php");
  4.  
  5. // Kijken of er is ingelogd
  6. if(isset($_POST['username'])) {
  7. $username = $_POST['username'];
  8. }
  9. elseif (isset($_COOKIE['username']))
  10. {
  11. $username = $_COOKIE['username'];
  12. }
  13. else
  14. {
  15. header ("Location: login.php");
  16. }
  17.  
  18. // Tijd nu
  19. $timenow = date("H:i");
  20.  
  21. // Loginnaam en rang
  22. $sql_urang = "SELECT user_level, user_id
  23. FROM users
  24. WHERE user_name = '$username'";
  25. $result_urang = mysql_query($sql_urang);
  26. $row_urang = mysql_fetch_array($result_urang);
  27.  
  28. // Gebruikerrang
  29. $menurang = $row_urang['user_level'];
  30.  
  31.  
  32. // User ID
  33. $userid = $row_urang['user_id'];
  34.  
  35.  
  36. // ID Content lezen
  37. $content = isset($_GET['content']) && trim($_GET['content'])!='' ? $_GET['content'] : '';
  38.  
  39. // Query Content
  40. $sql_content = "SELECT content_id FROM content WHERE content_name = '$content'";
  41. $result_content = mysql_query($sql_content);
  42. $row_content = mysql_fetch_array($result_content);
  43.  
  44. $contentid = $row_content['content_id'];
  45.  
  46.  
  47. // Datum nu
  48. $year = date("Y"); // Jaar nu
  49. $month = date("m"); // Maand nu
  50.  
  51. ?>



Dit zijn de files die ik heb
Offline Beirensg - 07/02/2011 15:34
Avatar van Beirensg HTML beginner Als ik het goed voorheb is dit het probleem:
- je verandert iets in de code bvb in index.php
- je herlaadt de pagina (refresh)
- de verandering is niet zichtbaar

Indien je echter het volgende doet:
- je verandert iets in de code bvb in index.php
- je herlaadt de pagina (browser sluiten en pagina laden)
- de verandering is wel zichtbaar

Ik kan mij niet van de indruk ontdoen dat dit ligt aan de cache van de browser.
Is de cache van uw browser volledig leeg? zijn de instellingen van je browser goed ingesteld???
De aanpassing van de headers (zie 1 van mijn antwoorden hierboven) deed niks? Indien dit allemaal correct is, zit ik vast. 

Misschien dat iemand anders een   lumineus   idee heeft? 
Offline Kevin - 07/02/2011 19:11
Avatar van Kevin Crew Ajax/REST Graag lange codes plaatsen op http://www.plaatscode.be.

Probeer eens met een JavaScript library te werken, die vangen alle AJAX requests gemakkelijker op volgens browser. (bv jQuery)
Je kan met een instelling in een library je caching uit zetten.
Offline Ruultje - 07/02/2011 22:14
Avatar van Ruultje Nieuw lid Is in orde, Kevin.

Beirensg: Ik weet even niet hoe ik de cache kan controleren in de browser. De instellingen zijn gewoon de standaard instellingen. Daar lijkt het mij ook niet in te zitten. Moet ik zeggen dat ik wel alleen getest heb in IE. Misschien veroorzaakt die het probleem. Normaal gesproken werk ik met Firefox, maar wanneer ik dan in IE ga testen blijkt ineens veel niet te werken. Vandaar test ik eerst in IE.

Headers heb ik aangepast maar veranderde, helaas, niks.


Kevin: ik zal daarheen kijken. Ik kom namelijk ook in de problemen met andere dingen merk ik. De vraag die ik in een ander topic stelde leek opgelost te zijn (Deze link) maar toen ik hem in de div (Ajax, zie link bij mijn eerste bericht in dit topic) plaatste die wordt opgeroepen blijkt het ineens niet meer te werken (hij reageert maar op 1 checkbox). En ook hier kom ik er niet achter waar het probleem zich bevindt. Omdat de rest daarin wel goed werkt.
Offline vinTage - 07/02/2011 22:28
Avatar van vinTage Nieuw lid probeer eens (als dit al niet ge-oppert is in een van de andere topics) een unieken variable mee te sturen naar de php file:

jeSpreektDezePHPfileAan?var1=1&var2=2&var3=randomGetal!
Offline Beirensg - 08/02/2011 09:59
Avatar van Beirensg HTML beginner De cache kan je clearen via het menu tools, internet options en dan browsing history.

Aangezien je met IE werkt kan het ook liggen aan het feit dat je in debuggingmode werkt. Eventjes op F12 drukken voor de developertools te openen en dan op de tab script op stop debugging klikken (indien er start debugging staat, is het ok!!!)

Voor de nieuwe problemen: dit ligt waarschijnlijk aan JQuery en het doorlopen van de DOM, waarschijnlijk vindt hij niet de juiste elementen, of zijn er namen veranderd. We zullen de code hiervoor moeten bekijken
Offline Ruultje - 08/02/2011 11:56 (laatste wijziging 08/02/2011 11:57)
Avatar van Ruultje Nieuw lid
vinTage schreef:
probeer eens (als dit al niet ge-oppert is in een van de andere topics) een unieken variable mee te sturen naar de php file:

jeSpreektDezePHPfileAan?var1=1&var2=2&var3=randomGetal!


Dit dus in samenwerking met de javascript?

Beirensg schreef:
Aangezien je met IE werkt kan het ook liggen aan het feit dat je in debuggingmode werkt. Eventjes op F12 drukken voor de developertools te openen en dan op de tab script op stop debugging klikken (indien er start debugging staat, is het ok!!!)

Voor de nieuwe problemen: dit ligt waarschijnlijk aan JQuery en het doorlopen van de DOM, waarschijnlijk vindt hij niet de juiste elementen, of zijn er namen veranderd. We zullen de code hiervoor moeten bekijken


Cache is in ieder geval verwijderd nu.

Deze stond uit (stond start debugging). Heb hem wel aangezet om te kijken wat er fout ging bij het nieuwe probleem. Maar hij geeft helaas niks weer.

Hij ziet nu trouwens wel direct veranderingen. Ik weet alleen niet of het nu aan de cache gelegen heeft dan.

Ik zal de code zo in het betreffende topic plaatsen.
Offline Beirensg - 08/02/2011 15:28
Avatar van Beirensg HTML beginner start debugging is enkel voor JavaScript (ook JQuery dus) errors er uit te halen. Je kan dit gebruiken om snel een breakpoint in de functies te plaatsen. Waarschijnlijk zal je zo zien dat de functies change nooit uitgevoerd worden in je code (zie mijn antwoord op de desbetreffende vraag).
Hopelijk geraak je er nu een beetje uit. 
Offline Kevin - 08/02/2011 19:56
Avatar van Kevin Crew Ajax/REST Heb je dit misschien ergens online staan? Dat zou handig zijn omdat we dan even zelf kunnen testen/proberen en dan ga je misschien sneller een duidelijk antwoord hebben.
Offline Ruultje - 09/02/2011 08:38 (laatste wijziging 11/02/2011 11:37)
Avatar van Ruultje Nieuw lid Ik moet zeggen dat het mij wel (met bepaalde dingen) al heeft geholpen. De change werd inderdaad niet uitgevoerd.

Staat nog nergens online, Kevin. Ik zal straks (als het gaat lukken) de files online zetten.


Update het werkt nu goed:

Ik heb deze erin gezet en zowel gisteren als vandaag werkt alles goed.

  1. <?php
  2. // Geen cache
  3. header("Expires: Mon, 26 Jul 1990 05:00:00 GMT");
  4. header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  5. header("Cache-Control: no-store, no-cache, must-revalidate");
  6. header("Cache-Control: post-check=0, pre-check=0", false);
  7. header("Pragma: no-cache");
  8. ?>


Nu (eindelijk) die onUnload functie gaan bestuderen en de cookies.
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.247s