2012-03-17 52 views
0

我使用Jquery Ajax來加載內容並使用.html()方法將其插入到div中。之後,我需要獲得加載內容的高度來計算更多尺寸,但似乎內容並未最終加載。當我嘗試獲得它的身高時,它有時可以正常工作,但是另一次我得到一個很小的身高值。jQuery Ajax .html()就緒請求

阿賈克斯負載功能:

function loadPage(url,data){ 
    jQuery.ajax({ 
     'url': url, 
     'dataType': 'json', 
     'data': data, 
     success: function(data,s,xhdr){ // data, status 
         if(!data){ return false }; 
      pagenav(data); 
     } 
    }); 
    return false;} 

function pagenav(data){ 
    if(!data){ return false }; 
    if(typeof(data.content)=="object"){ 
     for(var i in data.content){ 
      if(data.content[i].target_id == 'panelMain'){ 
         jQuery('#panelMain').html(data.content[0].content); 
          setTimeout(function(){ 
           onLoad(); 
          },0); 

      }else{ 
       jQuery('#panelFooter').html(data.content[1].content); 
      } 
     } 
    } 
    } 

的onLoad函數處理整個高度的事。我試圖使用setTimeout方法來完全加載DOM,然後再操作新的元素。將超時設置爲更大的值(可以說500)對我來說工作正常,但這不能是我想要的正確方法。

在此先感謝

+0

嘗試在for循環 – Nemoy 2012-03-17 14:23:30

回答

0

有你的代碼的幾個問題,我可以看到它...

首先你pagenav()返回的東西時,數據的計算結果爲假,這是相同的檢查你已經在ajax成功回調中做了。

其次,你走過data.content把鑰匙放在變量i。在for循環中,您檢查data.content中的當前鍵是否具有等於'panelMain'的屬性target_id。如果這是真的你以某種方式假設瓦特/電子進入面板主要將在data.content[0] =>我相信這應該是data.content[i]不?

onLoad()通話是在for循環所以在有可能被多次調用或之前在for循環已經結束....

以下是我認爲你想做的事:

function loadPage(url, data) { 
    jQuery.ajax({ 
     'url': url, 
     'dataType': 'json', 
     'data': data, 
     success: function(data, s, xhdr) { // data, status 
      if (!data) { 
       return false 
      }; 

      pagenav(data); 
     } 
    }); 
    return false; // mind you this function will always return false since ajax calls are async 
} 

function pagenav(data) { 
    if (typeof(data.content) == "object") { 
     for (var i in data.content) { 
      jQuery('#' + data.content[i].target_id).html(data.content[i].content); 
     } 

     onLoad(); 
    } 
} 
+0

之後調用'onLoad();'如果你沒有在其他地方重新使用pagenav(我認爲它會愚蠢地看到它只處理ajax調用的返回,而沒有其他)應該將代碼放入loadPage函數的成功回調中。 – sg3s 2012-03-17 14:45:21

+0

thx回覆。是的,它應該是[我],我只是改變了測試。原因[i]在我的情況下只能是0或1,並且0將始終爲panelMain,因爲1將始終爲panelFooter,onLoad不能被多次觸發。將onLoad函數移出循環,甚至使用完整的函數,會導致更高的高度問題。我會建議我的onLoad函數可能失敗!但就像我說的有點超時它有效,這意味着它沒有。對? – Kurt 2012-03-17 16:33:02