Javascript Ajax发布表单-如何重新提交?

Javascript Ajax发布表单-如何重新提交?,javascript,jquery,ajax,forms,Javascript,Jquery,Ajax,Forms,因此,我有下面的表单,使用ajax调用服务器进行用户身份验证。现在的问题是,假设用户密码是错误的。如果用户试图更正它,任何后续调用都不会再触发('submit')功能,因此他会被卡在页面上。我怎样才能允许重新提交表格 var login_email=document.getElementById(“login_email”); var login_password=document.getElementById(“login_password”); $(函数(){ $('form#login

因此,我有下面的表单,使用ajax调用服务器进行用户身份验证。现在的问题是,假设用户密码是错误的。如果用户试图更正它,任何后续调用都不会再触发('submit')功能,因此他会被卡在页面上。我怎样才能允许重新提交表格

var login_email=document.getElementById(“login_email”);
var login_password=document.getElementById(“login_password”);
$(函数(){
$('form#login _form')。在('submit',函数(e)上{
控制台日志(“提交”);
$.post('/auth_user',$(this).serialize(),函数(数据){
控制台日志(数据);
如果(数据==“没有用户注册此电子邮件。”){
登录_email.setCustomValidity(数据);
}否则如果(数据==“密码不正确”){
登录密码。setCustomValidity(数据);
}否则{
}
});
e、 预防默认值();
});
});

电子邮件地址*
密码*

登录
能否尝试向html按钮标记添加类型提交属性

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="/dashboard" id="login_form" method="post">
                    <div class="field-wrap">
                        <label>
                            Email Address<span class="req">*</span>
                        </label>
                        <input type="email" name="email" id="login_email" required autocomplete="off"/>
                    </div>
                    <div class="field-wrap">
                        <label>
                            Password<span class="req">*</span>
                        </label>
                        <input type="password" name="password" id="login_password" required autocomplete="off"/>
                    </div>
                    <p class="forgot"><a href="#">Forgot Password?</a></p>
                    <button class="btn btn-primary" type="submit"/>Log In</button>
</form>

另一种方法是在按钮上放置一个单击处理程序,并在内部调用表单的.submit()。。。根据上面的讨论


将电子邮件和密码的凭证身份验证ajax移动到onchange事件,并根据ajax结果将customvalidation消息设置为“无效用户名或密码”或“”。

而不是使用
$('form#login_form')。在('submit',函数(e)
上,您考虑过使用submit函数吗?像这样
$('form#login _form').submit(函数(e).
Hmm,根据您向我们展示的代码,我看不出任何后续ajax调用从不触发的理由…您的'console.log(“submit”)'在第一次尝试后从不登录控制台?与您的问题无关,但建议您将错误提示更改为“无效用户名或密码”不管哪一个是错误的。根据你的代码输出,黑客将能够知道何时他们击中了有效的用户名,只需强行输入密码。在服务器上的auth_用户调用中也要这样做。是的,只有第一次,之后它也总是弹出有效性消息,但我永远不会得到任何后续的控制台日志。我认为它可能与
e.preventDefault();
有关,但不知道如何修复它。@ChrisCaviness很好的观点!很好的建议,但任何后续的按钮按下都不会触发该功能。
$(function() {
    $('form#login_form').submit(function(e) {
        console.log("submit");
        $.post('/auth_user', $(this).serialize(), function (data) {
            console.log(data);
            if(data == "No user registered with this email.") {
                login_email.setCustomValidity(data);
            } else if(data == "Incorrect password.") {
                login_password.setCustomValidity(data);
            } else {

            }
        });
        e.preventDefault();
    });
});