【问题标题】:Return false on condition of jQuery post callback在 jQuery post 回调的条件下返回 false
【发布时间】:2012-01-03 15:25:16
【问题描述】:

我有一个相当复杂的函数,它会在提交表单时执行几个 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!)

谁能指出我正确的方向,因为我已经盯着这条路太久了!谢谢大家。

【问题讨论】:

    标签: jquery ajax function post callback


    【解决方案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;
    }
    

    【讨论】:

      【解决方案2】:

      解决您的问题的最简单方法是让它成为一个同步调用,

      $.ajaxSetup({async: false});
      
      $.post(..);
      
      $.ajaxSetup({async: true});
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-28
        • 2016-09-13
        • 1970-01-01
        • 1970-01-01
        • 2023-03-09
        • 2021-03-31
        • 1970-01-01
        • 2015-08-11
        相关资源
        最近更新 更多