让同步代码等待异步调用

时间:2012-03-07 15:18:53

标签: 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 false; // Do not submit the original form
  } else {
    // Submit the original form
  }
});

data结果始终为null,如果_data被定价,因为$.post是异步调用。我如何等待$.post来电完成?

编辑:正如评论中所写,我想避免使用$.ajax({async: true}),因为它冻结了页面;有没有办法在不冻结页面的情况下获得相同的效果?

2 个答案:

答案 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 

可以设置为同步

相关问题