根据ajax响应停止表单提交

时间:2013-08-19 13:20:48

标签: jquery forms submit

我正在使用onsubmit =“return check_for_conflict()”来调用此函数:

function check_for_conflict(){
var client_id = $('#agent_select').val();

//Stop submit if no agent selected.
if (client_id == 0){
    alert("Please select an agent.")
    return false;
}
var duration = $('#select_job_duration').val();
var id = $('#input_id').val();
var dat = $('#input_date').val();
var st_time = $('#input_st_time').val();

//Check if scheduling conflict and stop submit if there is a conflict.
$.post("check_for_conflicts.php", { job_duration: duration, provider_id: id, job_date: dat, job_st_time: st_time },
    function(data){
        console.log(data.status);
        if(data.status == 'conflict'){
            alert("There is a conflict with this time.")
            return false;
        }
    }, "json"
);

//Continue submit if now scheduled conflicts.
return true;

}

我有两张支票可以停止提交表单。第二次检查取决于.post响应。这部分不起作用,因为它在.post完成之前达到了最终的“返回true”。如何使用.post响应来停止提交表单?

2 个答案:

答案 0 :(得分:2)

当然可以(但不是那样),只是总是阻止表单提交,然后使用本机提交在ajax成功处理程序中提交:

删除内联JS:

<form id="someform">
    <!-- form content -->
</form>

然后执行:

$('#someform').on('submit', function(e) {
    e.preventDefault();
    var form      = this,
        client_id = $('#agent_select').val();

    if (client_id == 0) {
        alert("Please select an agent.");
    }else{
        var data = {
            job_duration : $('#select_job_duration').val(),
            provider_id  : $('#input_id').val(),
            job_date     : $('#input_date').val(),
            job_st_time  : $('#input_st_time').val()
        };

        $.post("check_for_conflicts.php", data, function(result){
            console.log(result.status);
            if( $.trim( result.status ) == 'conflict') {
                alert("There is a conflict with this time.")
            }else{
                form.submit();
            }
        }, "json");
    }
});

答案 1 :(得分:0)

  

如何使用.post响应停止提交表单?

你做不到。正如观察和指定的那样,它是异步的。

您需要以任何速度阻止发布,并对AJAX调用的成功函数进行编程提交。也许事先设置一个变量来区分第一次提交和重新提交。