我正在使用 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);
}
}
});
});
登录.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));
}
最佳答案
您的问题不在于 e.preventDefault()
。您的字段不匹配,这就是它们为空的原因。
您的 data
参数应该是:data: {sign_in_username: 用户名, sign_in_password: 密码}
。
您的 PHP 脚本收到的请求中包含错误的字段名称。
将来,为了调试目的,在您的 PHP 脚本上尝试 var_dump($_POST);
。这将使您了解收到的请求中包含的内容。
关于javascript - 提交被 preventDefault() 阻止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22544122/