【问题标题】:submit prevented by preventDefalut()提交被 preventDefault() 阻止
【发布时间】:2014-04-27 22:57:10
【问题描述】:

我正在使用 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));
}

【问题讨论】:

    标签: javascript php jquery ajax json


    【解决方案1】:

    您的问题不是e.preventDefault()。您的字段不匹配,这就是它们为空的原因。

    您的data 参数应为:data: {sign_in_username: username, sign_in_password: password}

    您的 PHP 脚本收到的请求中包含错误的字段名称。

    将来,出于调试目的,请在您的 PHP 脚本上尝试var_dump($_POST);。这将使您了解收到的请求中包含什么内容。

    【讨论】:

    • 我照你说的做了,但还是一样。这不是问题,因为当我删除 e.preventDefault 时,如果条件正确并显示 {"msg":"Success.","url":"index.php","status":true} 以防万一我输入正确的用户名和密码
    • 如果您删除 e.preventDefault(),它会提交 HTML 表单。表单上的元素名称是正确的。 AJAX 调用中输入字段的名称不正确。如果您删除了e.preventDefault(),表单正常工作。
    猜你喜欢
    • 2021-08-26
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多