这里是网页设计的新手。我有一个登录表单,在php中验证并完美运行但是当我尝试使用ajax进行验证时它不起作用。当我运行页面时,它表示无论输入到表单中它都是成功的。我已经尝试了几天试图让它在许多不同的方法中进行验证。如果有更好的方法请告诉我!
php在这里,与登录表单在同一页面
if (isset($_POST['login'])) {
$email = mysqli_real_escape_string($con, $_POST['email']);
$password = mysqli_real_escape_string($con, $_POST['password']);
$result = mysqli_query($con, "SELECT * FROM users WHERE email = '" . $email. "' and password = '" . md5($password) . "'");
if ($row = mysqli_fetch_array($result)) {
echo json_encode('true');
$_SESSION['usr_id'] = $row['id'];
$_SESSION['usr_name'] = $row['name'];
$_SESSION['logged_in'] = true;
} else {
echo json_encode('false');
$errormsg = "Incorrect Email or Password!!!";
}
}
?>
$(document).ready(function() {
$('#login_submit').click(function() {
var form = $('#login_form').serialize();
$.ajax({
type: "POST",
url: "header.php",
data: form,
success:function (response){
alert('Hi');
},
error: function(response){
alert('Nope');
}
});
});
});

<form id="login_form" form role="form" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="loginform">
<label class="login_form_labels"> Email:</label>
<input type="email" id="email" class="login_input" name="email"><br><br>
<label class="login_form_labels"> Password:</label>
<input type="password" id="password" class="login_input" name="password"><br>
<div id="stay_log">
Stay logged in.
<input type="checkbox" name="stayLoggedIn" value=1 id="checkbox_1">
</div>
<input class="login_form_btn" name="login" value="Submit" type="Submit" id="login_submit">
<button class="login_form_btn" type="button">Forget your Password?</button>
</form>
&#13;
请帮忙!
答案 0 :(得分:0)
首先使用警报(响应)来查找您获得的响应。它应该是真是假。
成功:功能(响应){
if(response === "true")
{
alert("hi");
}
else
{
alert("nope");
}
},
答案 1 :(得分:0)
在 dataType
中将 Json
设置为 ajax
,如下所示
$.ajax({
type: "POST",
url: "header.php",
dataType: json,
data: form,
success:function (response){
alert('Hi');
},
error: function(response){
alert('Nope');
}
});
试试这个......
答案 2 :(得分:0)
我认为您需要从服务器端请求纯JSON响应并在您的ajax成功方法中处理它。
在您的PHP代码中。
$response=array();
if (!empty($_POST)) {
$email = mysqli_real_escape_string($con, $_POST['email']);
$password = mysqli_real_escape_string($con, $_POST['password']);
$result = mysqli_query($con, "SELECT * FROM users WHERE email = '" . $email. "' and password = '" . md5($password) . "'");
if ($row = mysqli_fetch_array($result)) {
echo json_encode('true');
$_SESSION['usr_id'] = $row['id'];
$_SESSION['usr_name'] = $row['name'];
$_SESSION['logged_in'] = true;
$response['type']="success";
$response['message']="Login done successfully";
} else {
$response['type']="error";
$response['message']="Incorrect Email or Password!!!";
}
}
else
{
$response['type']="error";
$response['message']="invalid post request";
}
ob_clean();
echo json_encode($response);
die();
从服务器上面的方式,您只能以json格式进行响应。
在你的ajax中调用javascript代码
$(document).ready(function() {
$('#login_submit').click(function() {
var form = $('#login_form').serialize();
$.ajax({
type: 'post',
url: $('#login_form').attr("action"),
data: form,
dataType:'json'
success:function (response){
if(response.type=="success")
{
alert(response.message);
// write code for handle your success login;
}
else
{
alert(response.message);
// write code for handle your failure login;
}
},
error: function(response){
alert('Nope');
}
});
});
});
您必须在ajax成功响应中处理来自服务器端的JSON响应
答案 3 :(得分:0)
在jQuery / AJAX中,HTTP响应代码用于判断它是否成功。因此,如果登录失败,您应该在PHP中设置一个标头,指示此失败。
public class SuppDocuments
{
public string Title { get; set; }
public int[] documentid { get; set; }
}
通过这样做,您甚至不必处理生成的JSON,只是为了获得更多信息。但基本结果会告诉您:如果调用if (.. login has failed .. ) {
// HTTP 401 = 'Unauthorized'.
http_response_code(401);
}
回调,则登录成功。如果调用success
,则无论出于何种原因都无法成功。
这将列出您的基本流程,然后您可以解析结果消息以查看正在进行的任何详细信息(内部服务器错误,用户未知,密码不匹配等)。
有关替代方案的列表,请参阅List of HTTP response codes,有关使用401的论证,请参阅this question。