2017-04-06 116 views
0

所以基本上我有这个弹出窗体的提交按钮上有一个preventDefault以防止它最初提交。我使用jQuery将输入发送到AJAX函数,并希望根据该AJAX函数的结果向用户显示消息。AJAX的结果不会等待查询完成

但是,我从AJAX函数获得的数据总是相同的。这几乎就像跳过查询并回显它的第一个结果。

这是代码。

HTML

<form class="form" method="post" action="login.php" id="login-nav"> 
    <div class="form-group"> 
    <label class="sr-only">Email</label> 
    <input type="email" class="form-control" name="login_email" id="login_email" placeholder="Email" required> 
    </div> 
    <div class="form-group"> 
    <label class="sr-only">Password</label> 
    <input type="password" class="form-control" name="login_password" id="login_password" placeholder="Password" required> 
    </div> 
    <div class="form-group"> 
    <input type="submit" class="btn btn-primary btn-block" id="login_btn" value="Log In"></input> 
    </div> 
    <span id="login_msg"></span> 
</form> 

JS

$(function() { 
    $("#login-nav").find("input[type='submit']").click(function(event) { 
    $('#login_msg').html("<img src='../img/default.gif'>") 
    event.preventDefault(); 
    event.stopPropagation(); 
    loginSubmit_OnClick(); 
    }); 
}); 

function loginSubmit_OnClick() { 
    var email = $('#login_email').val(); 
    var password = $('#login_password').val(); 
    $.ajax({ 
    url: "login.php", 
    type: 'POST', 
    data: {email: email, password: password}, 
    success: function(result){ 
      if (result == "success") { 
      $('#login_msg').html("<div class='alert alert-success' role='alert'>Logged in.</div>"); 
      } 
      if (result == "failed") { 
      $('#login_msg').html("<div class='alert alert-danger' role='alert'>Wrong password!</div>"); 
      } 
     } 
    }) 
}; 

PHP

<?php 
include('connect.php'); 

$success = false; 
$email = $_POST['login_email']; 

$stmt = $db->prepare(...); 

$stmt->execute(); 

$result = $stmt->fetch(PDO::FETCH_NUM); 
$user_id = $result[0]; 
$email = $result[1]; 
$password = $result[2]; 

if ($result) { 
    if (password_verify($_POST['login_password'], $password)) { 
    $success = true; 
    } 
} 

if ($success) { 
    echo "success"; 
} 
else { 
    echo "failed"; 
} 
?> 

它总是返回 “失败”,并展示了我ssage“错误的密码!”即使我100%肯定它应该返回成功(没有AJAX测试它肯定)。

+0

你没有循环'fetch',所以它只检查第一个帐户......或者你是否使用用户名/密码进行查询?您似乎已删除查询。 – chris85

+0

查询使用来自输入字段的电子邮件。 – user7431590

+0

如果在'failed'输出'$ result',它是否找到了正确的用户? – chris85

回答

0

你确定你的AJAX请求参数有正确的键吗?看起来他们可能有所不同。

尝试使用:的

$.ajax({ 
    ... 
    data: $('#login-nav').serialize(), 
    ... 
}; 

,而不是

$.ajax({ 
    ... 
    data: {email: email, password: password}, 
    ... 
}; 
0

阿贾克斯您发布data: {email: email, password: password},但是在PHP你期望$_POST['login_email']$_POST['login_password']。如果你这样做var_dump($_POST);它应该包含电子邮件密码代替LOGIN_EMAILlogin_password

您也可以使用Ghiyas的答案(https://stackoverflow.com/a/43263398/7081773)。它会模拟发送帖子,就好像JavaScript没有阻止默认行为一样。因此,它会按照预期发送您的输入。