我正在使用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响应来停止提交表单?
答案 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调用的成功函数进行编程提交。也许事先设置一个变量来区分第一次提交和重新提交。