2012-03-15 122 views
1

两个电话:双呼叫AJAX使用jquery

$('#add').live('click', function() { 

    $('.simplebox').slideUp(200, function() { 
     $('html, body').animate({scrollTop:140}, 350, function() { 
      $('#loading-add').slideDown(300, function() { 
       $.ajax({ 
        type: "POST", 
        url: "..", 
        data: getDataToPost(), 
        cache: false, 
        success: function(data){ 

         alert(data); 

         $('#loading-add').delay(1000).fadeOut(200, function() { 
          $('#successfull-add').fadeIn(200); 
         }); 

        } 
       }); 
      }); 
     }); 
    }); 

}) 

但是,如果我打电话到live事件后,立即AJAX,它调用的时间(因为它应该是):

$('#add').live('click', function() { 
       $.ajax({ 
        type: "POST", 
        url: "..", 
        data: getDataToPost(), 
        cache: false, 
        success: function(data){ 

         alert(data); 

         $('#loading-add').delay(1000).fadeOut(200, function() { 
          $('#successfull-add').fadeIn(200); 
         }); 

        } 
       }); 
}) 

有什么想法为什么会发生?真奇怪..

谢谢。使用queue()

+0

你能否更详细地解释一下你的问题吗? – 2012-03-15 18:35:23

+0

我想你可能已经放弃了你的一些问题,这有点不清楚。你能添加什么来让我们更好地理解你的问题吗? – 2012-03-15 18:35:46

+1

可能重复[jQuery $ .animate()多个元素,但只触发一次回调](http://stackoverflow.com/questions/8793246/jquery-animate-multiple-elements-but-only-fire-callback-once) - 问题在于你的'animate'回调函数对每个元素都调用一次,在这种情况下是'html'和'body'。要么只使用'body'或者对这个问题的答案。这个问题也可能与其他动画方法一样。 – 2012-03-15 18:37:01

回答

0

尝试:

$('.simplebox').slideUp(200); 
$('.simplebox').queue(function() { 
    $('body').animate({scrollTop:140}, 350); 
    $('body').queue(function() { 
     $('#loading-add').slideDown(300); 
     $('#loading-add').queue(function() { 
      //ajax call 
     }); 
    }); 
}) 
+0

问题是'$('html,body')。animate(...)'虽然... – 2012-03-15 18:51:28

+0

'$('body')'就足够了,虽然我更新代码以反映这一点,但它很相似。 – 2012-03-15 18:55:03