表单提交后网页UI未在刷新时更新

时间:2017-09-02 08:49:19

标签: javascript php jquery html login

我正在创建一个可以从任何页面进行登录的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不会更新执行登录的页面。知道为什么会这样吗?

由于

3 个答案:

答案 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上使用。

所以似乎有两种解决方案如下。

  1. 改用IE或FireFox
  2. 尝试使用上面链接文章的代码

    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()。