![](/img/trans.png)
[英]Javascript callback after on change event has partial page refresh
[英]Javascript: Refresh current page after event change $_SESSION in a other page
我需要一些帮助。 我创建了一个多语言站点,没有使用相同的 php 文件进行更改,我只是修改了它的内容。 为此,我使用会话。 所以我配置了 2 个按钮:FR 和 EN,它们改变了语言。 我 go 通过另一个 php 文件。 使用此代码,如果我手动重新加载页面,它就可以工作。 但如果我使用:
location.reload(true);
它不起作用,我想在没有用户干预的情况下自动重新加载页面。 有没有人有解决方案? 谢谢你,问候,
我的代码索引.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>
更改.php:
<?php
session_start();
if(isset($_REQUEST['lang']))
{
$lang = $_REQUEST['lang'];
$_SESSION['lang'] = $lang;
}
?>
您的代码会立即重新加载index.php
并且甚至不等待发送请求(更改change.php
)。
您可以处理XMLHttpRequest
的onreadystatechange事件,特别是您正在寻找 state 2,即HEADERS_RECEIVED或任何更高版本的 Z9ED39E2EA931586B3A985A694EZEF5。
当 PHP 脚本发送标头时,这意味着它已经完成执行(并设置会话)。 您可以安全地重新加载索引页面。
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();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.