Javascript 让同步代码等待异步调用
我有一个表单,可以捕获提交事件。我必须等待Javascript 让同步代码等待异步调用,javascript,jquery,Javascript,Jquery,我有一个表单,可以捕获提交事件。我必须等待$.post电话才能决定是否提交。我试过这个: $('#my_form').submit(function(event){ var data = null; $.post("/post/call").then(function(_data){ data = _data; }); if ( $.isPlainObject(data) && data.status === 'ko' ) { return f
$.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
,如果\u data
值化,也是如此,因为$.post
是一个异步调用。如何等待$.post
调用完成
编辑:如评论中所述,我希望避免使用
$.ajax({async:true})
,因为它会冻结页面;有没有办法在不冻结页面的情况下获得相同的效果?您应该有某种标志,表明表单是否要提交,以及ajax正在处理。然后,当ajax调用通过时,调用$(“#我的表单”).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;
});
如果您使用的是MVC/C#,并且可以使用Json请求访问您的web服务,请了解以下内容
$.getJSON
是异步的
SOLUTION: $.ajax
可以设置为synchronous(同步)可能重复为什么不将要等待的操作放在异步回调的末尾?然后从何处获取.then()。一个回调函数在文章中附加一个逗号。您的if也必须在回调中,因为在post完成之前没有设置数据。请使用同步调用作为
Felix Kling
adviced。一切都可以通过$获得。post
也可以通过$获得。ajax
;我希望避免$.ajax({async:true}),因为它会冻结页面;有没有办法在不冻结页面的情况下获得相同的效果?您可能应该添加另一个标志,指示呼叫是否正在进行。
SOLUTION: $.ajax