2017-09-02 99 views
0

我正在創建一個可以從任何頁面進行登錄的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(); 
    } 
}); 

在報頭模板(其中i有登錄按鈕)我檢查用戶是否登錄和下方

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>'; 

部首模板作爲給定更新的HTML代碼包括使用

的頁面中
<?php include 'templates/header.php' ?> 

理想情況下,成功登錄時,頁面應該刷新,而不是LOGIN/SIGNUP按鈕,它應該顯示登錄用戶的名稱。但用戶界面並未更新。即使成功登錄後,頁面也會顯示LOGIN/SIGNUP按鈕。

當我導航到另一個頁面時,它按預期工作。 UI不會更新登錄所在的頁面。任何想法爲什麼發生這種情況?

謝謝

+0

你確定驗證器正在寫入$ _SESSION嗎? –

+0

是的。當我導航到另一個頁面時,它完美地工作。說,我從聯繫頁面登錄。刷新時,聯繫頁面不會更新。當我進入常見問題頁面時,其工作和用戶界面正在更新。 –

+0

好吧,驗證器正在運行,但頁面並不令人耳目一新。你能否確認'success(){}'正在執行?也許把一個控制檯登錄來檢查它 –

回答

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

0

看來下面的代碼在Ajax成功後沒有奏效。

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

如何嘗試以下

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

的代碼,如果一個以上也不管用,請問你使用的瀏覽器時,這個問題出現?

+0

Ajax代碼正在工作,頁面正在刷新。我正在使用鉻最新版本 –

+0

@KaleshKaladharan順便說一句,你嘗試過[window.location.href = window.location.href;]?這是否提供了一些幫助? –

0

也許下面的代碼緩存的鉻緩存系統,認爲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(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); 
        }); 
    }, 
    
+0

這沒有幫助 –

+0

如何確認Web服務器上的捕獲設置 –

+0

請您詳細說明一下嗎?我不明白。對不起,我是一個新手用php和網頁的東西 –