将数字数组从jsp服务器端传递到javascript客户端

将数字数组从jsp服务器端传递到javascript客户端,jsp,Jsp,我是javascript的初学者,我不知道如何用java编程,而理解Servlet真的很难。我所了解的只是如何创建一个jsp页面,它向我的Postgres 9.2数据库提交一个复杂的查询,并将结果行返回到html,然后在客户端的iframe中显示。我想做的是在同一个jsp页面中获取相同的结果行,并将它们发送到客户端javascript上的数组中,这样我就可以在flot中绘制数据。如果我能做到这一点,也许这会让我省去试图理解java和Serlet的麻烦,并且会使我的绘图更容易,因为每次查询更改时,

我是javascript的初学者,我不知道如何用java编程,而理解Servlet真的很难。我所了解的只是如何创建一个jsp页面,它向我的Postgres 9.2数据库提交一个复杂的查询,并将结果行返回到html,然后在客户端的iframe中显示。我想做的是在同一个jsp页面中获取相同的结果行,并将它们发送到客户端javascript上的数组中,这样我就可以在flot中绘制数据。如果我能做到这一点,也许这会让我省去试图理解java和Serlet的麻烦,并且会使我的绘图更容易,因为每次查询更改时,图形都会精确地绘制查询返回的内容。我不想对数据库进行更多必要的查询。我以前在这里读过,不推荐使用jsp打印html以外的内容,但根据这篇文章 我可以将结果行打印到一个数组中,并让客户端的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]];
根据我在该链接中的理解,我应该能够使数组如下所示:

"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>
但它返回的是draw_v变量未定义。
我肯定我搞错了。有人能指出是什么让这一切起作用吗?我试过阅读关于google gson的文章,但我也不理解它,也不知道它在这个例子中是否对我有帮助。

我解决了我的问题,因为我意识到如果你有一个调用jsp页面的起始html页面,并且该jsp页面查询数据库并返回一个结果集,然后,您不能以某种形式将这些结果发送回原始html页面,以便与原始html页面上的javascript进行交互


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

查看HTML源代码。查看JSP编写Javascript的方式是否有任何错误,并更正。您还可以使用Firefox和Tools->Error Console来处理Javascript运行时类型的错误。序言、对正等不是必需的。请,只问你的问题;如果这是一个“初学者”问题,那没关系,直接去问吧。只添加我们需要了解的信息,以及我们需要做些什么来帮助您。Firebug输出显示来自Net->html的响应为:var draw_v=[[1.0146.50],[2.01449.00],[3.01459.50],[4.01470.00],[5.01480.50],[6.01491.00],[7.01489.50],[8.0,1512.00],[9.0,1510.50],[10.0,1533.00],[11.0,1543.50],[12.0,1542.00];唯一的其他错误是:“ReferenceError:draw_v未定义”您是否在定义它之前引用了draw_v?