【问题标题】:How can i parse JsonArray from jsp to Javascript我如何将 JsonArray 从 jsp 解析为 Javascript
【发布时间】:2014-12-21 14:08:54
【问题描述】:

这是我的代码:

Display.jsp:

    <%
    JSONArray jsonArray = new JSONArray();
    String location = request.getParameter("location");
    Class.forName(OracleDriver.class.getName().toString());
    Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","ram","ram");
    PreparedStatement preparedStatement = connection.prepareStatement("select * from job where location = ?");
    preparedStatement.setString(1,location);
    ResultSet resultSet = preparedStatement.executeQuery();
    int index = 0;
    if(!resultSet.next()){
            jsonArray.add(0, new Job("NA","NA","NA","NA","NA"));
            out.println(jsonArray);
    }else{
        while(resultSet.next()){
            index ++;
            Job job = new Job(resultSet.getString("title"),resultSet.getString("location"),resultSet.getString("eligibility"),resultSet.getString("position"),resultSet.getString("pdate"));
            jsonArray.add(index, job);
        }
        out.println(jsonArray);
    }

%>

jsonArray 包含 Job 对象列表, 我如何在javascript中解析jsonArray

任何想法...

【问题讨论】:

  • 使用jQuery.getJSON( )也在jsp页面中设置内容类型response.setContentType("application/json");

标签: java jquery json jsp


【解决方案1】:

一个建议可能是将隐藏的 dom 元素附加到 javascript 变量,如 p 或隐藏输入。

然后,将内部 html 设置为您的 json 数组

<p id="myJsonArray" style="display:none;"> <%= jsonArray %> </p>

最后,附加一些事件,触发一个javascript函数来读取那个内部的html

...如果你想要它自动,也许是一个定时间隔或检查那个元素是否改变的东西。

不过,老实说,我会忘记所有这些,而只是编写一个 Web 服务(使用 jersey 或其他东西),并创建一个 ajax 调用来获得你想要的 :) 但是,这是我的意见。

如果您需要任何进一步的想法,请告诉我!

这里有一些工作代码。 我仍然想强调,这可能不是最好的方法。 将这么多代码混合在一个 html 页面中很难维护,而且不可读。我发现这个链接到另一个 StackOverflow 帖子。值得一读。 https://netbeans.org/kb/docs/javaee/ecommerce/design.html#architecture
StackOverflow 帖子:JSF vs Facelets vs JSP

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>

<%@ page import="java.util.List,java.util.ArrayList,org.json.JSONArray,java.util.Arrays" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>test</title>
<!-- DataTables CSS -->
<link rel="stylesheet" type="text/css" href="//cdn.datatables.net/1.10.3/css/jquery.dataTables.css">

<!-- jQuery -->
<script type="text/javascript" charset="utf8" src="//code.jquery.com/jquery-1.10.2.min.js"></script>

<!-- DataTables -->
<script type="text/javascript" charset="utf8" src="//cdn.datatables.net/1.10.3/js/jquery.dataTables.js"></script>

<script>
$(function(){
    //If your data won't change, you could just draw the table immediately after the page loads.
    var testTable = $("#dynamicTable").DataTable({
        data : JSON.parse($("#hiddenJson").html())
    });

    //If you're going to be updating data dynamically, you might 
    $("#refresh").click(function(){
        var data = JSON.parse($("#hiddenJson").html());

        testTable.clear();
        var modifiedData;
        for(r in data) {
            modifiedData = data[r];
            modifiedData[0] += " dynamically added";
            modifiedData[1] += " dynamically added";
            modifiedData[2] += " dynamically added";
            testTable.row.add(modifiedData);        
        };              
        testTable.draw();
    });
});

</script>
</head>
<body>
<%

    JSONArray jsonArray = new JSONArray();
    String location = request.getParameter("location");
   //  Class.forName(OracleDriver.class.getName().toString());
   // Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","ram","ram");
   // PreparedStatement preparedStatement = connection.prepareStatement("select * from job where location = ?");
   // preparedStatement.setString(1,location);
   // ResultSet resultSet = preparedStatement.executeQuery();
    //int index = 0;
    //if(!resultSet.next()){
    //        jsonArray.add(0, new Job("NA","NA","NA","NA","NA"));
    //        out.println(jsonArray);
    //}else{
    //    while(resultSet.next()){
    //        index ++;
    //        Job job = new Job(resultSet.getString("title"),resultSet.getString("location"),resultSet.getString("eligibility"),resultSet.getString("position"),resultSet.getString("pdate"));
    //        jsonArray.add(index, job);
    // }    
    jsonArray.put(0, ("NA,NA,NA").split(",")); 
    jsonArray.put(1, ("NA2,NA2,NA2").split(",")); 
    jsonArray.put(2, ("NA3,NA3,NA3").split(",")); 

%>

<p id="hiddenJson" style="display:none;"> <%= jsonArray.toString() %> </p>

<table id="dynamicTable">
  <thead>
    <th>column 1</th>
    <th>column 2</th>
    <th>column 3</th>
  </thead>
</table>

<button id="refresh"> Update Data </button>
</body>
</html>

【讨论】:

  • 感谢回复...但是这里我不打算直接显示 jsonArray。我将 jsonarray 保存的所有这些对象放在一个表中
  • 对,隐藏元素只保存数据,不直接显示。使用 javascript 以 json 格式读取元素数据,然后用它做你想做的事......
  • 你能提供一些骨架代码吗...我不知道
  • 我明天会这样做,如果那时其他人不这样做:) 同时,也许可以尝试创建一个读取元素内部 HTML 的按钮。
  • 用工作代码更新了帖子,并直接从 jQuery DataTables 示例页面复制了一些内容以添加一些额外的内容。我无权访问您的数据库和其他对象,例如 Job....
猜你喜欢
  • 2012-04-18
  • 1970-01-01
  • 2023-01-03
  • 1970-01-01
  • 2018-09-14
  • 1970-01-01
  • 1970-01-01
  • 2018-05-17
  • 2017-07-27
相关资源
最近更新 更多