2013-04-18 60 views
2

我覺得我很生氣。在後續調用中無法獲取AJAX數據的維數

我想要做的就是獲取通過AJAX加載的數據的維度,而不管調用的次數。它在第一次運行良好,但每次隨後的調用都會得到0的值 - 儘管它出現在頁面上,正如人們所期望的那樣。

// The AJAX part 
function getDetails(request){ 
    $placehold.empty(); 
    return jQ.get(request); 
}; 

// Filter & render AJAX data 
function renderData(data){ 
    var endResult = $(data).find('#productDetails'); 
    endResult.fadeTo(0,0).appendTo($placehold); 
    $placehold.removeClass('loading'); 
    endResult.fadeTo(300,1); // <- Added as per request 
    // Console log previously uncalled data works fine 
    // Called again, I get zero every single time 
    console.log(jQ('#anyElementInAJAXData').outerHeight(false)); 
}; 

// Click handler 
jQ('#slides').on('click', '.slideLink', function(e){ 
    e.preventDefault(); 
    var target = jQ(this).attr("href"); 
    $placehold.fadeIn(360).addClass('loading'); 
    getDetails(target) 
     .done(function(result) { 
      renderData(result); 
     }) 
}); 

我在做什麼錯?

+1

在隨後的調用中console.log(jQ('#anyElementInAJAXData').length)'的結果是什麼? – Matt

+0

爲什麼你淡出'endResult',但永遠不會再次出現? – m90

+0

@Matt它每次都會返回「1」 – verism

回答

0

你的問題似乎在於endResult.fadeTo(0,0).appendTo($ placehold);方法。 appendTo只會在fadeTo完成後纔會發生,但是您的方法的其餘部分在fadeTo剛剛啓動時執行。這'可能'解決它:

var endResult = $(data).find('#productDetails'); 
endResult.fadeTo(0,0, function() { 
    $(this).appendTo($placehold); 
    $placehold.removeClass('loading'); 
    $(this).fadeTo(300,1); // <- Added as per request 
    // Console log previously uncalled data works fine 
    // Called again, I get zero every single time 
    console.log(jQ('#anyElementInAJAXData').outerHeight(false)); 
}); 
+0

感謝您的建議,但這不是問題。 append()方法是同步的 - 意味着它在任何下面的代碼執行之前完成。我所做的只是確保'endResult'在插入前不透明度爲0。然後,一旦它被隱藏起來(理論上)可測量的並且在正確的位置,剩下的就會執行。 – verism

+0

append方法當然不是同步的(它將在fadeTo之後執行,但是該鏈之後的代碼將在fadeTo啓動後直接執行)。但是,它可以看起來是同步的,因爲你使用的持續時間爲0.看看這個小提琴,看看我的意思:http://jsfiddle.net/UM4Ed/(它使用控制檯日誌,你看到'檢查1'和之後一秒鐘'檢查2')。雖然小提琴確實顯示了正確的高度,但是......也許你應該將'endResult.fadeTo(0.0).appendTo(...)'這一行改爲'endResult.css({opacity:0})。appendTo(。 ..)'。這樣它將是同步的。 – Toverbal

+0

...另外,高度似乎只有當元素(略)可見時纔是正確的,也許將不透明度值更改爲0.1會有所幫助。我確信這個問題就是這樣的。 – Toverbal

相關問題