提交由preventDefault()阻止

时间:2014-03-20 20:16:41

标签: 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);                                 
                }
            }
        });               
    });

的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));
}

1 个答案:

答案 0 :(得分:3)

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

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

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

将来,为了进行调试,请在PHP脚本上尝试var_dump($_POST);。这将让您了解您收到的请求中包含的内容。