簡體   English   中英

提交表單后刷新時網頁UI不更新

[英]Webpage UI not updating on refresh after form submission

我正在創建一個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按鈕,它應該顯示已登錄用戶的名稱。 但是用戶界面沒有更新。 即使成功登錄后,頁面也會顯示LOGIN / SIGNUP按鈕。

當我導航到其他頁面時,它按預期運行。 用戶界面未針對執行登錄的頁面進行更新。 知道為什么會這樣嗎?

謝謝

在Ajax成功之后,下面的代碼似乎無法正常工作。

 success: function () { location.reload(); }, 

嘗試下面的代碼怎么樣

success: function () {
    window.location.href=window.location.href;
},

如果以上任一方法也不起作用,請問出現此問題時使用的瀏覽器嗎?

也許下面的代碼是由chrome緩存系統緩存的,它認為php從未更改,因此沒有發出php請求。

 success: function () { location.reload(); }, 

嘗試下面的代碼,它將獲得服務器資源,而無需考慮資源是否曾經被更改。

success: function () {
    location.reload(true);
},

希望這會對您有所幫助。

強制使用javascript-no-cache重新加載Chrome中的頁面

根據上面的文章,結果如下:

在IE和FF上,我發現以下代碼可以正常工作;

window.location.reload(true);

但是,它不適用於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); }); }, 

問題與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()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM