2013-01-05 146 views
0

我寫的jQuery阿賈克斯簡單的負載內容:jQuery的AJAX加載內容兩次

$('.bar a[rel]').live('click', function() { 
    if($('.modal-'+ $(this).attr('rel')).length == 0) { 
     $.ajax({ 
      url: 'users/'+ $(this).attr('rel'), 
      success: function(data) { 
       $('header + .container').children().animate({ 
        'height': 0, 
        'padding': 0, 
        'opacity': 0 
       }, 500, function() { 
        $(this).remove(); 

        $(data).hide().appendTo('header + .container').fadeIn(1000); 
       });     
      } 
     }); 
    } 

    return false; 
}); 

爲什麼這段代碼加載內容(appendTo)兩次?

+0

更多信息? –

+0

僅供參考,'.live()'從jQuery 1.7開始已棄用,您應該使用'.on()'http://api.jquery.com/live/。而'成功'將很快被棄用,你應該使用'.done()'來代替。 http://api.jquery.com/jQuery.ajax/ – wakooka

+1

@jerome參數與'.ajax'方法的'success'屬性不被棄用。正如您所指出的那樣,棄用的是'jqXHR.success'方法,它已被'.done'取代。 – nbrooks

回答

1

動畫代碼爲每個孩子執行一次;你沒有提供你的HTML,但由於它運行了兩次,我認爲可以肯定的是有兩個。修改功能直接對家長的工作:

$('header + .container').animate({ 
    'height': 0, 
    'padding': 0, 
    'opacity': 0 
}, 500, function() { 
    $(this).empty(); 

    $(data).hide().appendTo('header + .container').fadeIn(1000); 
}); 

取決於你想要達到的效果,有其他選擇,其中包括排隊的兒童動畫,只有全部完成後,附加數據。一種更爲粗糙的方式也可能是延遲數據追加至少是動畫時間長度的多倍(本例中爲500ms)。這一切都取決於你想要它看起來像什麼,但不知何故,我希望簡單的方法會很好。

P.S.你的選擇器看起來很奇怪,但是因爲你完全可以追加工作,所以我懷疑這只是本論壇或拼寫錯誤的縮寫形式。否則,某件事肯定是錯的。

+0

這樣做有一點改變:'$('header + .container')。children()。animate(...'必須是,因爲我想動畫並移除(通過'empty()')子節點並添加數據到'$('header + .container')'。現在完美工作,謝謝! – kicaj

+0

@kicaj很高興提供幫助。如果問題解決了,請點擊左邊的複選標記標記答案爲已接受[change它綠色](http://meta.stackexchange.com/a/5235/205949)。 – nbrooks