2017-09-05 27 views
1

等提交我的窗體類的.login這觸發ajax調用login.php裏面的login.php存在於welcome.php通話,以確保加密的密碼數據庫匹配並且輸入的用戶名稱存在於數據庫中。提及我的ajax調用成功嘗試運行也是有幫助的,但不會發生重定向到我的welcome.php。所以,我對你們所有人的問題是,我是否在正確的莊園裏談論這個問題?Ajax調用重定向到PHP文件,而不是調用另一個php文件

$('.login').on('submit', function(){ 
 

 
     // serialize the form 
 
     var formData = $(this).serialize(); 
 
     $.ajax({ 
 
      type  : 'POST', 
 
      url   : 'login.php', 
 
      data  : formData, 
 

 
      success: function() { 
 
      alert("Success"); 
 
      }, 
 
      error: function(xhr) { 
 
      alert("fail"); 
 
      } 
 
     }) 
 
     .done(function (data) { 
 
      
 
     }) 
 
     .fail(function (error) { 
 
      console.log(data); 
 
     }); 
 
     return false; 
 
});
<html> 
 
<body> 
 
<?php 
 
require 'connect.php'; 
 
if((isset($_POST['user-login']) && !empty($_POST['user-login']))|| 
 
    (isset($_POST['pass-login']) && !empty($_POST['pass-login']))){ 
 

 
    $sth = $dbh->prepare('SELECT name FROM test_table WHERE name=?;'); 
 

 

 
    $passLogin = $_POST['pass-login']; 
 
    $nameLogin = $_POST['user-login']; 
 
    
 
    $sth->execute(Array($nameLogin)); 
 

 
if(password_verify($passLogin, $hashed_password) && $sth->rowCount() > 0) { 
 
    header("Location:welcome.php"); 
 
    exit; 
 
    } 
 
} 
 
else{ 
 
    echo 'error'; 
 
} 
 
?> 
 
</body> 
 
</html> 
 

 
***************************************************************** 
 
<html> 
 
<body> 
 
    <?php 
 
    echo 'welcome'; 
 
    ?> 
 
</body> 
 
</html>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js" type="text/javascript"> 
 

 
<form class = "login"> 
 
     <label for="user-login">Username</label> 
 
     <input id="user-login" name="user-login"></br> 
 
     <label for="pass-login">Password</label> 
 
     <input id="pass-login" name="pass-login"></br> 
 
     <input type="submit" name= "submit" value="submit" id = "submit"> 
 
     <a id = "register-a">Register Now</a> 
 
    </form>

+0

你認爲'$ hashed_pa​​ssword'會在哪裏奇蹟般地出現?您必須從執行的語句中獲取數據才能看到它 – RiggsFolly

+0

ajax調用不會使頁面重定向,整個要點是在「幕後」發出請求,而無需重定向。 – adeneo

+0

所以我有ajax調用的原因是因爲我最初的設計是不離開頁面,這讓我想知道這是否可能,所以我試圖把它變成重定向。 –

回答

-1

阿賈克斯的要點是使一個HTTP請求,而無需離開當前頁面。瀏覽器看起來不會重定向,因爲結果會返回到Ajax處理程序,它不會對它們執行任何操作(您的done函數爲空)。

您的目標似乎是發出HTTP請求,然後顯示歡迎頁面。

你不應該使用Ajax。只需使用常規表單提交。

如果提交的數據存在問題(並且大多數時間不存在,所以不值得在此情況下應用Ajax),然後重新顯示錶單。

-1

這是可能的,但是你永遠不會到達重定向呼叫,因爲 $hashed_password在if語句未定義。

這會拋出一個錯誤消息,但您需要使用像chrome inspector> network> login.php這樣的工具來查看響應。

希望這有助於調試在未來:)

0

您將需要使用JavaScript重定向您的頁面。 Ajax請求無法將用戶瀏覽器從服務器端重定向。我建議如果您的登錄成功,請將您的ajax success()函數的成功標誌傳回以處理然後使用window.location.href進行重定向。

只要你不知道,你的腳本將永遠返回成功。即使你echo 'error';。你需要爲錯誤函數執行失敗的HTTP狀態碼,或者在你的代碼中出現錯誤!

+0

只需添加一下,當你的ajax請求發生時,php腳本就會運行一個完全不同的過程來說你的頁面加載。上下文與頁面本身是分開的,所以你不能執行你期望改變頁面行爲的任何動作,除非你把數據返回給JS並讓JS處理所有的東西:) –

相關問題