1

我正在使用 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 完成之前达到了最终的“返回真”。如何使用 .post 响应来阻止提交表单?

4

2 回答 2

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");
    }
});
于 2013-08-19T13:31:04.140 回答
0

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

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

无论如何,您都需要阻止该帖子,并对您的 AJAX 调用成功函数进行编程提交。也许事先设置一个变量来区分第一次提交和重新提交。

于 2013-08-19T13:23:40.307 回答