I need help for a subtlety. I created a multilingual site without changing using the same php file, I just modify its content. For this I use sessions. So I configured 2 buttons: FR and EN which change the language. I go through another php file. With this code it works if I manually reload the page. But if I use:
location.reload(true);
it doesn’t work and i want to automatically reload the page without user intervention. Does anyone have the solution? Thanking you, Regards,
my code index.php :
<?php session_start(); if(isset($_SESSION['lang']) == false){ $_SESSION['lang'] = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); } ?> <!doctype html> <html> <head> <meta charset="utf-8"> <link href="_style/style-master.css" rel="stylesheet" type="text/css"> <script type='text/javascript'> function setSession(lang) { xmlhttp = new XMLHttpRequest(); xmlhttp.open("GET", "change.php?lang=" + lang, true); xmlhttp.send(); //here reload and refresh page after execute code in change.php } </script> <title></title> </head> <?php if($_SESSION['lang'] == "fr"){ echo "<body>"; echo "<p>Page française</p>"; echo "<a href="javascript:setSession('en')"><input type='submit' value='EN'></a>"; echo "<a href="javascript:setSession('fr')"><input type='submit' value='FR'></a>"; echo "</body>"; } else{ echo "<body>"; echo "<p>English page</p>"; echo "<a href="javascript:setSession('en')"><input type='submit' value='EN'></a>"; echo "<a href="javascript:setSession('fr')"><input type='submit' value='FR'></a>"; echo "</body>"; } ?> </html>
change.php :
<?php session_start(); if(isset($_REQUEST['lang'])) { $lang = $_REQUEST['lang']; $_SESSION['lang'] = $lang; } ?>
Advertisement
Answer
Your code reloads the index.php
immediately and doesn’t even wait for the request (to change.php
) to be sent.
You can handle the onreadystatechange event of XMLHttpRequest
, specifically you’re looking for state 2, which is HEADERS_RECEIVED, or any later state.
When the PHP script sends headers, it means it already finished executing (and set the session). And you can safely reload the index page.
function setSession(lang) { xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState === 2) { //here reload and refresh page after execute code in change.php location.reload(true); } } xmlhttp.open("GET", "change.php?lang=" + lang, true); xmlhttp.send(); }