【问题标题】:Pass numeric array from jsp server side to javascript client side将数字数组从 jsp 服务器端传递到 javascript 客户端
【发布时间】:2013-09-23 16:51:17
【问题描述】:

我是 javascript 的初学者,我不知道如何用 java 编程,并且试图理解 servlet 真的很难。我所了解的是如何创建一个 jsp 页面,该页面将复杂的查询提交到我的 Postgres 9.2 数据库并将结果行返回到 html,然后我将其显示在客户端的 iframe 中。我想要做的是在同一个jsp页面中获取相同的结果行,并将它们发送到客户端javascript上的一个数组,这样我就可以在flot中绘制数据。如果我能让它工作,也许这会让我免于尝试理解 java 和 serlet 的麻烦,并且会使我的绘图更容易,因为图表会准确地绘制每次查询更改时查询返回的内容。我不想更多地查询数据库。我之前在这里读过,不建议将 jsp 用于打印 html 以外的其他事情,但根据这篇文章 Populating JavaScript Array from JSP List 我也许能够将结果行打印到一个数组中,并将其提供给客户端的 javascript。但是我无法让客户端看到数组变量,而且我确定我缺少一些东西并且不理解一些基本的东西。

我使用“c:forEach”和“c:out”从查询结果中打印出的行到 html 中如下所示:

"Jan"   1   1426.50   472.65
"Feb"   2   1449.00   482.10
"Mar"   3   1459.50   485.55
"Apr"   4   1470.00   489.00
"May"   5   1480.50   492.45
"Jun"   6   1491.00   495.90
"Jul"   7   1489.50   493.35
"Aug"   8   1512.00   502.80
"Sep"   9   1510.50   500.25
"Oct"   10  1533.00   509.70
"Nov"   11  1543.50   513.15
"Dec"   12  1542.00   510.60

根据我在该链接中的理解,我应该能够使数组看起来像这样:

var withdraw_v = [[ 1.0, 1426.50],[ 2.0, 1449.00],[ 3.0, 1459.50],[ 4.0, 1470.00],[ 5.0, 1480.50],[ 6.0, 1491.00],[ 7.0, 1489.50],[ 8.0, 1512.00],[ 9.0, 1510.50],[ 10.0, 1533.00],[ 11.0, 1543.50],[ 12.0, 1542.00]];

在我的 jsp 文件中使用此代码:

<sql:query var="rs" dataSource="jdbc/medford">
    My sql query goes here
</sql:query>

<script type="text/javascript">
  var withdraw_v = [
    <c:forEach var="row" items="${rs.rows}" varStatus="status">
  [ <c:out value="${row.Month_num}"/>, <c:out value="${row.Average_Withdrawals}"/>]
  <c:if test="${not status.last}">,</c:if>
  </c:forEach>
    ];
</script>

在我的 html/javascript 文件中,我尝试使用数组来绘制我的数据:

$.plot("#plot", withdraw_v);

但它返回withdraw_v 变量未定义。 我确定我错了。谁能指出什么可以使这项工作?我已经尝试阅读有关 google-gson 的信息,但我也不理解它,或者在这种情况下它是否会对我有所帮助。

【问题讨论】:

  • 查看 HTML 源代码。查看 JSP 编写 Javascript 的方式是否有任何错误,并更正。您还可以使用 Firefox 和 Tools->Error Console 来处理 Javascript 运行时类型错误。
  • 序言、理由等并不是真正需要的。请,问你的问题;如果这是一个“初学者”问题,那没关系,只要去问就行了。仅添加我们需要了解您的要求以及我们需要做些什么来提供帮助的信息。
  • Firebug 输出将来自 Net->html 的响应显示为:
  • 唯一的另一个错误是:“ReferenceError:withdraw_v is not defined”
  • 你在定义它之前是否引用了withdraw_v?

标签: jsp


【解决方案1】:

我解决了我的问题,如果您有一个调用 jsp 页面的起始 html 页面,并且该 jsp 页面查询数据库并返回一个结果集,那么您不能将这些结果以某种形式发送回原始页面html 页面与原始 html 页面上的 javascript 交互。

相反,我使用 html 页面调用 jsp 页面,然后将数据库结果返回到一个新的 html 页面,该页面插入到原始页面的 iframe 中。浮动图表在 iframe 中正确绘制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-18
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    相关资源
    最近更新 更多