javascript - 提交被 preventDefault() 阻止

标签 javascript php jquery ajax json

我正在使用 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/

相关文章:

javascript - 使用 Angular 简单上一个\下一个 slider

php - WP Multisite + SSL 在 wp-admin 上给出 404

javascript - Jquery:语法错误:函数语句需要名称

javascript - Jquery,如何将注意力集中在包装器 div 内的子元素上?

javascript - 暂停一个程序一段时间

javascript - 为什么 fillRect 命令不允许创建命中区域,而 rect 和 fill 的组合却可以?

php - 从使用 inet_pton() 存储的 MySQL 中获取值

javascript - 当不透明度为 0 时隐藏 div 中的可点击链接

javascript - 需要帮助格式化字符串文字正则表达式

php - 如何在php中将图像文件存储到数据库中?