在jQuery post回调的条件下返回false

时间:2012-01-03 15:25:16

标签: jquery ajax function post callback

我有一个相当复杂的功能,在提交表单时会做几个AJAX帖子,以验证值。根据POST返回的值,提交应该工作或失败。我认为这可以使用全局布尔值并在整个函数中将其值设置为true或false,然后在结尾检查布尔值是否已更改为“true”,如果是,则调用'return false;'。

但这失败了。我已经阅读了它,我认为这是因为AJAX调用是异步的,因此代码不会按顺序执行。

我的代码是这样的:

  $('.to-step-3').click(function(){
var shape = '';
blnError = false;
$.post('/base/RoomBuilder/GetRoomShape.aspx', function(data) {
  if(data.substring(0,5) == 'Error'){
    alert(data);
    blnError = true;
  }else{
    shape = data;

    $.post('/base/RoomBuilder/GetRoomDimensions.aspx', function(data2) {
      if(data2.substring(0,5) == 'Error'){
        alert(data2);
        blnError = true;
      }else{
        var arrDims = data2.split('_');
        var l =  arrDims[0];
        var w =  arrDims[1];
        var sl = arrDims[2];
        var ll = arrDims[3];
        var sw = arrDims[4];
        var lw = arrDims[5];
        var failMessage = 'Please enter all required dimensions to build your room';

        switch(shape) {
          case 'square':
            if(!(notNullOrEmpty(l))){
              alert(failMessage);
              blnError = true;
            }
          break;
          case'rectangle':
            if(!(notNullOrEmpty(l)) || !(notNullOrEmpty(w))){
              alert(failMessage);
              blnError = true;
            }
          break;
          case'lshaped':
            if(!(notNullOrEmpty(sl)) || !(notNullOrEmpty(ll)) || !(notNullOrEmpty(sw)) || !(notNullOrEmpty(lw))){
              alert(failMessage);
              blnError = true;
            }
          break;
          case'lshapedalt':
            if(!(notNullOrEmpty(sl)) || !(notNullOrEmpty(ll)) || !(notNullOrEmpty(sw)) || !(notNullOrEmpty(lw))){
              alert(failMessage);
              blnError = true;
            }
          break;
        }
      }
    });


  }
});

if(blnError == true){
  return false;
}else{
  return true;
}

});

我找到了一个类似jquery - return value from callback function (in post request) into the function its inside of?类似的例子,但是在我需要做的事情上我很难理解它(我不可能在Javascript上做得很好!)

有人可以指出我正确的方向,因为我一直盯着这个方向太久了!谢谢大家。

2 个答案:

答案 0 :(得分:1)

jQuery post本质上是异步的,因此在ajax响应到来之前if条件已经执行。如果你想要执行等待直到ajax响应,那么你可以使用jQuery ajax将async属性设置为false。试试这个

$.ajax({
   url: '/base/RoomBuilder/GetRoomDimensions.aspx',
   async: false,
   type: 'post',
   success: function(){
       //Your logic here
   }
});

//Now check the condition here
if(blnError == true){
  return false;
}else{
  return true;
}

答案 1 :(得分:0)

解决问题的最简单方法是将其作为同步调用,

$.ajaxSetup({async: false});

$.post(..);

$.ajaxSetup({async: true});