不完全确定这是否有名称,但基本上我有一个从db中的结果生成的大型HTML页面。
因此,直接在浏览器中查看HTML页面(这是一个报告)并不会立即显示所有内容,而是显示它的内容,并在检索到DB的结果时添加其他HTML ...
有没有办法可以向这个HTML页面发出AJAX请求,而不是等到整个页面(报告)准备就绪,我可以在加载HTML报告时开始处理响应?还是有另一种方式吗?
Atm我做了我的AJAX响应它就在那里呆了一两分钟,直到HTML页面完成......
如果上下文有用:HTML报告由Java servlet生成,进行AJAX调用的页面是JSP页面。不幸的是,我不能轻易打破报告,因为它是由BIRT(Eclipse报告扩展)生成的。
提前致谢。
答案 0 :(得分: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);
}
}
}
}
}