【问题标题】:Performing ajax Checks Before Form Sumbit via Javascript在通过 Javascript 提交表单之前执行 ajax 检查
【发布时间】:2013-06-29 13:24:47
【问题描述】:

我有一个用于注册新用户的简单表格。我想阻止用户再次提交相同的电子邮件 ID。因此,在提交表单之前,我想做一个 Ajax 检查电子邮件 ID 是否存在。如果电子邮件 ID 存在,我会提醒用户。如果没有,我让表单提交。

$("#sign_in_form").submit(function(event){ 

event.preventDefault();
$.post("http://xyz.com/check_if_user_exists", {
        email : $("#contact_person_email").val()
    }).done(function(data) {

var res = parseInt(data);
if(res==1){

//Email Exists
alert("Email exists . Please use different email " );
return false; //----------------------------1)

}else{
  //Email doesnt exist
return true;   //--------------------------- 2)
}

});

//end of function

});

这段代码的问题是由于 Javascript 的异步特性,函数甚至在 ajax post 语句返回结果之前就结束了。因此 1) 和 2) 处的 return false 或 return true 语句无效。处理这个问题的正确方法是什么?

【问题讨论】:

    标签: javascript jquery ajax forms asynchronous


    【解决方案1】:

    如果检查有效,使用js原生事件提交表单:

    $("#sign_in_form").submit(function (event) {
    
        event.preventDefault();
        $.post("http://xyz.com/check_if_user_exists", {
            email: $("#contact_person_email").val()
        }).done(function (data) {
    
            var res = parseInt(data);
            if (res == 1) {
    
                //Email Exists
                alert("Email exists . Please use different email ");
    
            } else {
                document.getElementById('sign_in_form').submit();
            }
    
        });
    
        //end of function
    
    });
    

    【讨论】:

    • 但这不会导致 $("#sign_in_form").submit() 函数被再次调用,因此会发生递归吗?
    • 否,因为在节点元素 (js) 上使用 submit() 不会触发 jquery 提交处理程序
    • +1 但是 OP 的代码有什么问题?如果他只想调用警报而不是自动提交怎么办。
    • OP 的代码不会提交表单,因为 ajax 是异步的,因此在此处提交不返回任何内容,或者如果 OP 删除了阻止的默认行为,即使他的检查逻辑返回 false,表单也将始终提交
    • 开幕海报,OP就是你;)
    猜你喜欢
    • 2022-11-24
    • 2018-05-07
    • 1970-01-01
    • 2012-08-23
    • 2019-10-21
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    • 2013-02-17
    相关资源
    最近更新 更多