我有一种形式可以捕获提交事件。我必须等待$.post
电话才能决定是否提交。我试过这个:
$('#my_form').submit(function(event){
var data = null;
$.post("/post/call").then(function(_data){
data = _data;
});
if ( $.isPlainObject(data) && data.status === 'ko' ) {
return false; // Do not submit the original form
} else {
// Submit the original form
}
});
但data
结果始终为null
,如果_data
被定价,因为$.post
是异步调用。我如何等待$.post
来电完成?
$.ajax({async: true})
,因为它冻结了页面;有没有办法在不冻结页面的情况下获得相同的效果?
答案 0 :(得分:2)
你应该有一些标志,表示要提交或不提交表单,以及ajax正在处理。然后当ajax调用通过时,调用$('#my_form').submit()
发送表单。
松散,
var validated = false;
$('#my_form').submit(function(event){
if (validated) {
return true;
}
$.post("/post/call").then(function(_data){
var data = _data;
if ( $.isPlainObject(data) && data.status === 'ko' ) {
// Do not submit the original form
} else {
validated = true;
$('#my_form').submit();
}
});
return false;
});
答案 1 :(得分:0)
如果您正在使用MVC / C#,并且可以使用Json请求访问您的Web服务,请了解以下内容。
$.getJSON
是异步的
SOLUTION: $.ajax
可以设置为同步