【问题标题】:Is there a way to trigger Javascript function while the JSP loads有没有办法在 JSP 加载时触发 Javascript 函数
【发布时间】:2012-10-02 17:45:31
【问题描述】:

我有一个 JSP 页面,它获取数据库结果并需要很长时间才能加载,有时有超过 500 个结果。我对此有几个问题:-

  1. 有没有办法优化这个过程?我在我的 servlet 中使用 JDBC 来获取结果并将它们呈现给 JSP。

  2. 我认为另一种方法是在 JSP 加载时显示“加载栏”PNG 图像,并在加载完成时隐藏它,这样用户就不会对我的 UI 发疯。那么如何在 JSP 初始化时实例化一个 Javascript 函数,然后在 JSP 加载完成后再次调用该函数?

【问题讨论】:

  • 您是否可以更改数据库 SQL 以限制返回的结果数量?见限制命令php.about.com/od/mysqlcommands/g/Limit_sql.htm
  • 不幸的是,事实并非如此。该应用程序有点像搜索应用程序,因此必须显示与搜索匹配的任何内容。

标签: java javascript jsp


【解决方案1】:

JavaScript 运行在客户端,JSP 代码运行在服务器上。它们不会同时运行,所以 JavaScript 没有用。如果需要很长时间,您需要找出服务器上的问题并分析您的代码。

您可以尝试在没有记录的情况下开始加载页面。然后,您可以使用 Ajax 请求加载内容。

【讨论】:

  • 感谢您的回复,考虑到我没有 AJAX 经验,是否有其他方法可以加快流程?我的意思是在 AJAX 之前,曾经有显示大量数据的应用程序。
  • 你知道为什么它需要永远吗?瓶颈在哪里?服务器端,在客户端渲染? Ajax 解决方案很简单,但它只是隐藏了您的真正问题。
  • @espascarello:当请求来自数据库的大型数据集时,加载需要很长时间,我的意思是 JDBC 迭代器需要很长时间。是否有任何您会推荐的示例 AJAX 代码。谢谢
【解决方案2】:

使用响应刷新:(JSP)

response.setHeader("Transfer-Encoding", "chunked");
response.getWriter().write("<html><head><script>alert('this will take awhile');</script></head>");
response.getWriter().flush();
...
/* long running JSP jdbc query and output */

使用 AJAX 或更简单的 IFRAME:

<!-- home.jsp -->
<html><head></head>
<body>
    <div id="loading">Your content is loading</div>
    <iframe name="content" src="jdbcquery.jsp" onLoad="document.getElementById('loading').innerHTML=='Load Succeeded';">
    </iframe>
</body>
</html>

【讨论】:

  • 感谢您的回复,有没有办法让JSP完全加载数据然后立即显示?
【解决方案3】:
  1. 您可以考虑分页。或者在用户向下滚动时使用 Ajax 动态添加行。

  2. 您可以使用以下伪代码在加载时显示动画。

伪代码:

<div id="loader">Loading / GIF animation</div>
<div id="result" style="display:none;">
  Lots of data.
  Should be flushed to the browser every now and then.
  This will take seconds...
</div>
<script type="text/javascript">
  $("#loader").hide();
  $("#result").show();
</script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    相关资源
    最近更新 更多