2012-03-15 260 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