Ajax等待动画完成

时间:2013-06-16 18:53:50

标签: jquery ajax forms animation wait

我知道之前在stackoverflow上讨论过这个话题。但所有结果都无助于解决我的问题。

我使用像这样的“form”jQuery插件:

$(document).ready(function() {
$('#myForm').ajaxForm({
        data: { Ajax: '1' },
        beforeSubmit:  beforeSEND,  // pre-submit callback
        success:       resultHANDLE  // post-submit callback
        });
    });

function beforeSEND () {
    $('#myForm').fadeTo(0, 0.5);
    $("textarea").addClass('loading');
    $("textarea").animate({backgroundPositionX: 0},1500});  
}

function resultHANDLE (responseText) {
    // Do somethig with the result
}

在beforeSEND功能中,背景img附加到textarea并从左向右移动。有点像进度条。

我现在的问题:无论动画是否完成,都会触发Ajax请求并处理结果。 如何强制JavaScript等待动画完成并在请求后发送?

非常感谢你的帮助!!

2 个答案:

答案 0 :(得分:1)

使用各种动画功能的“完整”回调:

  

complete类型:Function()动画播放后调用的函数   完整

你可以这样做:

$('#myForm').fadeTo(0, 0.5, function() { 
    $("textarea").addClass('loading');
    $("textarea").animate({backgroundPositionX: 0}, 1500, function() {
       $('#myForm').ajaxForm({
        data: {Ajax:'1'},
        success:       resultHANDLE
        });
    });
  });
});

答案 1 :(得分:0)

您可以尝试使用.promise()

  function setAjaxForm() {

      $('#myForm').ajaxForm({
          data: { Ajax: '1' },
          beforeSubmit: beforeSEND,  // pre-submit callback
          success: resultHANDLE,  // post-submit callback
      });
  }

  $('#myForm').fadeTo(0, 0.5).promise().done(function() {

    $("textarea")
      .addClass('loading')
      .animate({backgroundPositionX: 0},1500)
      .promise().done(setAjaxForm);

  });