2017-11-25 105 views
0

我正在使用ajax和php登錄,在這種情況下,我實際上正在登錄succesfuly。但我試圖在登錄時發出警報並刷新頁面。 當我嘗試登錄時,它給我提供了錯誤並且沒有提醒。但是,如果我刷新頁面,我看到我有PHP會話。我不明白爲什麼。Ajax登錄響應錯誤

這是我的代碼;

<script> 

$(document).ready(function(){ 
    $('#login_btn').click(function(){ 
     var email = $('#email').val(); 
     var password = $('#password').val(); 


     if(email == '' || password == ''){ 
     $("#login_error").html("*** Please enter your email/password"); 
     }else{    
      $('#login_error').html("<strong class='text-success'>Validating...</strong>"); 

       $.ajax({ 
       url: "login.php", 
       method: "post", 
       data:{email:email, password:password}, 
       success: function(data){ 
       if (data === 'yes') { 
        window.location.reload(); 
       }else{ 
        $('#login_error').html("<strong class='text-danger'>ERROR...</strong>"); 
       } 
      } 
       }); 

     } 
    }); 
}); 
</script> 

登錄PHP:

<?php 
session_start(); 
include ('../config/setup.php'); #database connection 


if(isset($_POST['email'])){ 
$q = "SELECT * FROM users WHERE email = '$_POST[email]' AND password = '$_POST[password]'"; 
$r = mysqli_query($dbc, $q); 

if(mysqli_num_rows($r) > 0){ 
    $_SESSION['email'] = $_POST['email']; 
    echo "yes"; 
}else{ 
    echo "no"; 
} 
} 
?> 

HTML:(一模內使用的登錄表單)

<div class="modal-body"> 

<div class="form-horizontal"> 
    <div class="form-group"> 
    <label for="email" class="col-sm-4 control-label">Email</label> 
    <div class="col-sm-8"> 
     <input type="email" class="form-control" name="email" id="email" placeholder="Account Email"> 
    </div> 
    </div> 
    <div class="form-group"> 
    <label for="password" class="col-sm-4 control-label">Password</label> 
    <div class="col-sm-8"> 
     <input type="password" class="form-control" name="password" id="password" placeholder="Account Password" > 
    </div> 
    </div> 

    <div class="form-group"> 
    <div class="col-sm-1"></div> 
    <div align="center" class="col-sm-10"> 
     <button name="login_btn" id="login_btn" class="btn btn-success btn-block text-center"><span id="loader_before" class="glyphicon glyphicon-log-in" aria-hidden="true"></span><i id="loader" class="fa fa-spinner fa-spin fa-x fa-fw"></i> Log in to Account</button> 
     </div> 
     <div class="col-sm-1"></div>  
    </div> 
</div> 

<div align="center" class="container-fluid"> 
<h6><a href="#"><strong class="text-danger">Forgot your password? Click here..</strong></a></h6> 
</div> 
<h5><div id="login_error" class="text-warning"></div></h5> 
</div> 

回答

0

你只需要更新您如果塊響應如下 `

if (data === 'yes') { 
    alert("You message here!"); 
    window.location.reload(); 
}else{ 
    $('#login_error').html("<strong class='text-danger'>ERROR...</strong>"); 
} 

`

+0

我試過了你的代碼,沒有給我任何提醒。只有錯誤... –

+0

你能分享這個錯誤嗎?它會幫助我解決問題。你也可以試試下面的sql語句。 $ q =「SELECT * FROM users WHERE email ='」。$ _ POST ['email']。「'AND password ='」。$ _ POST ['password']。「'」; –

+0

錯誤是:我有一個div,id是登錄錯誤。在JavaScript中,我使用這個div來顯示記錄嘗試的情況。當我嘗試登錄時,它會給我$('#login_error')。html(「 ERROR ...」); 而不是刷新頁面(window.location.reload();在Ajax)我刷新頁面,我看到我已經正確登錄。我需要看到我的成功股利,並刷新頁面後,如果我登錄正確。 –

0

當你在php上調用echo時,它會寫入該值,但不會返回它。那就是問題所在。 您不會從login.php返回「yes」或「no」,您只是在執行echo,它只會寫入該值,但不會將其返回給調用者。 ajax調用正在等待響應以'成功'回調進行處理。由於login.php沒有返回任何東西,它總是會落入else子句中。 解決的辦法是在login.php上更改它

if(mysqli_num_rows($r) > 0){ 
$_SESSION['email'] = $_POST['email']; 
    return "yes"; 
}else{ 
    return "no"; 
} 
+0

我已經改變回聲返回;但其相同。旁;如果它的回聲:在mozilla開發工具xhr答案是肯定的。如果我改變回聲返回;答案爲空。 –

+0

但有趣的是,它的登錄。沒有自動刷新,我刷新頁面和會話的工作 –

+0

爲什麼不使用mozilla開發工具進行調試,並試圖明白爲什麼如果hxr回答是的,你沒有收到該數據成功回調 – fejanto