我正在创建一个可以从任何页面进行登录的Web应用程序。为了达到这个目的,我使用了一个模态登录表单。成功登录后,我希望用户保持在同一页面上。这是我的登录验证脚本。
$.ajax({
dataType: "json",
type: "POST",
data: {
login: true,
email: cleanScripts($('#username').val()),
password: cleanScripts($('#password').val())
},
url: "plugins/validator.php",
success: function () {
location.reload();
},
error: function () {
$('.error').show();
}
});
在标题模板(我有登录按钮)上,我检查用户是否已登录并更新html代码,如下所示
if (!isset($_SESSION['userIdMain']))
echo '<li>
<a href="#" onclick="showLoginForm();">
<i class="dashicons dashicons-lock"></i>
<span>LOGIN/SIGN UP</span>
</a>
</li>';
else echo '<span>Hi, ' . $_SESSION["userName"] . '</span>';
页眉模板使用
包含在页面中<?php include 'templates/header.php' ?>
理想情况下,成功登录后,页面应刷新,而不是LOGIN / SIGNUP按钮,它应显示登录用户的名称。但UI没有更新。即使在成功登录后,页面也会显示LOGIN / SIGNUP按钮。
当我导航到其他页面时,它按预期工作。 UI不会更新执行登录的页面。知道为什么会这样吗?
由于
答案 0 :(得分:0)
在Ajax成功之后,以下代码似乎无效。
success: function () { location.reload(); },
如何尝试下面的代码
success: function () {
window.location.href=window.location.href;
},
如果上面的那个也不起作用,请告诉浏览器出现此问题时使用的浏览器?
答案 1 :(得分:0)
也许下面的代码是由chrome缓存系统缓存的,它认为php从未被更改过,并且没有发出php请求。
success: function () { location.reload(); },
尝试下面的代码,它将获取服务器资源,而不考虑资源是否曾被更改过。
success: function () {
location.reload(true);
},
希望这会给你一些帮助。
force-a-reload-of-page-in-chrome-using-javascript-no-cache
根据上面的文章,结果如下:
在IE和FF上,我发现以下代码工作正常;
window.location.reload(真);
但它无法在Chrome或Safari上使用。
所以似乎有两种解决方案如下。
尝试使用上面链接文章的代码
success: function () { $.ajax({ url: window.location.href, headers: { "Pragma": "no-cache", "Expires": -1, "Cache-Control": "no-cache" } }).done(function () { window.location.reload(true); }); },
答案 2 :(得分:0)
该问题与 session_start(); 有关。必须在每个页面上调用session_start()。我的模板文件顶部有session_start(),所以它成功写入$ _SESSION变量。
这就是它的样子。
主要文件
<?php
//Header contains login forms
include_once 'templates/header.php';
// All the other codes
$var = $_SESSION['loginData'];
include_once 'templates/footer.php';
?>
标题文件
<?php
session_start();
$_SESSION['loginData']=$_POST['loginId'];
?>
即使从头文件调用了session_start(),它也无法在主文件中使用。必须在需要访问$ _SESSION的每个文件上调用session_start()。