我正在使用ajax来验证登录。我遇到了javascript e.preventeDefault()的问题,当使用它时会阻止提交并始终显示验证空字段。当删除它是正确的但回显json数据并且不显示对话框内的验证消息,而是重定向到url并回显正确的json消息。我认为e.preventDefault阻止了提交,是否有其他方法将验证消息放入e.preventDefault()的对话框中?
$('#login_form').on('submit', function(e) {
e.preventDefault();
var username = $('#login_form input[name=sign_in_username]').val();
var password = $('#login_form input[name=sign_in_pass]').val();
$.ajax({
url: "login.php",
type: "POST",
data: {username: username,
password: password
},
dataType: 'json',
success: function(response) {
if(response.status){
$(this).unbind('submit').submit()
console.log(response);
window.location = response.url;
}
else{
$('#invalid_content').html(response.msg);
}
}
});
});
的login.php
if (((!isset($_POST["sign_in_pass"]) || !isset($_POST["sign_in_username"]) ) || trim($_POST["sign_in_pass"]) == "" || trim($_POST["sign_in_username"]) == "")) {
echo json_encode(array('msg' => "Username or password are empty.", 'url' => "", 'status' => false));
exit();
}
$rows = query("SELECT * FROM customers WHERE username = ?", $_POST["sign_in_username"]);
// nese form eshte bere submit
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (count($rows) == 1) {
$row = $rows[0];
if (crypt($_POST["sign_in_pass"], $row["hash"]) == $row["hash"]) {
$_SESSION["id"] = $row["id"];
echo json_encode(array('msg' => "Success.", 'url' => "index.php", 'status' => true));
}
} else {
echo json_encode(array('msg' => "Username or password invalid.", 'url' => "", 'status' => false));
}
} else {
echo json_encode(array('msg' => "Username or password invalid.", 'url' => "", 'status' => false));
}
答案 0 :(得分:3)
您的问题不是e.preventDefault()
。你的字段不匹配,这就是它们为空的原因。
您的data
参数应为:data: {sign_in_username: username, sign_in_password: password}
。
您的PHP脚本收到的请求中包含错误的字段名称。
将来,为了进行调试,请在PHP脚本上尝试var_dump($_POST);
。这将让您了解您收到的请求中包含的内容。