2010-06-03 75 views
1

不完全確定這是否有名稱,但基本上我有一個從db中結果生成的大型HTML頁面。AJAX從大型HTML頁面獲取數據作爲大型HTML頁面加載

因此,在瀏覽器中查看HTML頁面(這是報告)直接不會立即顯示的所有內容,但顯示它有什麼和從DB結果檢索添加額外的HTML ...

有沒有一種方法可以向此HTML頁面發出AJAX請求,而不是等待整個頁面(報表)準備就緒,我可以在加載HTML報表時開始處理響應?還是有另一種方式呢?

大氣壓使我的Ajax響應它只是坐在那裏一個或兩個,直到HTML頁面完成分鐘...

如果上下文沒有任何用處的:由一個Java servlet和生成的HTML報告製作AJAX調用的頁面是一個JSP頁面。不幸的是,由於它是由BIRT(Eclipse報表擴展)生成的,因此我不能很輕鬆地打破報告。

在此先感謝。

+0

棘手的,如果你不能在片 – baloo 2010-06-03 12:52:24

+0

我想我已經得到了它打破了報告......我使用jQuery作出AJAX調用。編寫我自己的onreadystatechange監聽器並檢查值爲3的readystates似乎讓我可以訪問響應對象的[incomplete] responseText !!一旦我進一步調查,我會回覆。 – 2010-06-03 13:45:45

回答

1

是的所有作品,如果任何人的興趣:

client.open("GET", reportUrl, true); 
client.onreadystatechange = responseListener; 
client.send(); 

var reportContents = document.getElementById("reportContents"); 
// Since this could considerably slow browsers for large reports, 
// don't edit report contents for every readystate equal to 3. 
// Do it every 10. 
var batchUpdate = 10; 
var responsesSinceUpdate = 0; 
// Don't update the whole contents, just add the new stuff 
// since the last update. 
var currentLengthOfReportHtml = 0; 
// Have max recommended length of report before showing warning. 
var maxRecommendedReportLength = 500000; 

function responseListener() 
{ 
    if (this.status == 200) 
    { 
     var readyState = this.readyState; 

     if (readyState == 3 || readyState == 4) 
     { 
      var updatePage = false; 

      if (readyState == 4) 
      { 
       updatePage = true; 
       var loadingDiv = document.getElementById("reportLoading"); 
       loadingDiv.innerHTML = ""; 
       toggleLargeReportWarning(false); 
      } 
      else 
      { 
       responsesSinceUpdate++; 

       if (responsesSinceUpdate > batchUpdate) 
       { 
        updatePage = true; 
        responsesSinceUpdate = 0; 
       } 
      } 

      if (updatePage) 
      { 
       var reportLength = this.responseText.length; 
       reportContents.innerHTML += this.responseText.substring(currentLengthOfReportHtml); 
       currentLengthOfReportHtml = reportLength; 

       if (reportLength > maxRecommendedReportLength && readyState == 3) 
       { 
        toggleLargeReportWarning(true); 
       } 
      } 
     } 
    } 
} 
+1

在IE顯然不工作:( – 2010-06-07 12:38:06