Java Highcharts-从Servlet到JSP
我对Highcharts和servlet/jsp有一些问题 我不太熟悉AJAX和JQUERY 我想在一个jsp Page2实时行序列中显示通过Javaservlet从数据库加载的相关数据x,y 这是我的jsp中的代码:Java Highcharts-从Servlet到JSP,java,jquery,jsp,servlets,highcharts,Java,Jquery,Jsp,Servlets,Highcharts,我对Highcharts和servlet/jsp有一些问题 我不太熟悉AJAX和JQUERY 我想在一个jsp Page2实时行序列中显示通过Javaservlet从数据库加载的相关数据x,y 这是我的jsp中的代码: <script type="text/javascript"> $(function () { var seriesOptions = []; $.getJSON('Grafico', function(data) { // Pop
<script type="text/javascript">
$(function () {
var seriesOptions = [];
$.getJSON('Grafico', function(data) {
// Populate series
for (i = 0; i < data.DeltaRealTime.length; i++){
seriesOptions[i] = {
name: data.DeltaRealTime[i].name,
data: [data.DeltaRealTime[i].key, parseFloat(data.DeltaRealTime[i].value)]
};
}
$('#container').highcharts({
chart: {
type: 'spline',
animation: Highcharts.svg, // don't animate in old IE
marginRight: 10,
events: {
load: function() {
// set up the updating of the chart each second
setInterval(function() {
$.getJSON('Grafico', function(data) {
// Populate series
for (i = 0; i < data.DeltaRealTime.length; i++){
var chart = $('#container').highcharts();
chart.series[i].addPoint([data.DeltaRealTime[i].key, parseFloat(data.DeltaRealTime[i].value)]);
}
});
}, 1000);
}
}
},
title: {
text: "Valori Delta"
},
xAxis: {
title: {
text: 'Campione'
}
},
yAxis: {
labels: {
format: '{value:.1f}'
},
title: {
text: 'Delta(f)'
},
},
series: seriesOptions
});
});
});
</script>
这是Grafico servlet:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/json");
PrintWriter out = response.getWriter();
try {
HttpSession session = request.getSession();
Seriale seriale = (Seriale)session.getAttribute("seriale");
if(seriale == null)
System.out.println("SERIALE=NULL");
else {
if(seriale.getSeriale().isOpen())
System.out.println("SERIALE APERTA");
System.out.println("ID SESSIONE DATI="+seriale.getSessioneDati().getId());
}
if(seriale != null && seriale.getSeriale().isOpen()) {
System.out.println("INIZIO A LEGGERE I DATI DAL DB");
Db db = new Db();
db.apriConnessione();
String sql = "SELECT * FROM MisuraRiposo ORDER BY id DESC LIMIT 1";
PreparedStatement ps = db.getConnection().prepareStatement(sql);
ResultSet rs = ps.executeQuery();
Map<String, String> data1 = new HashMap<String,String>();
Map<String, String> data2 = new HashMap<String,String>();
if(rs.next()) {
data1.put("name", "f1");
data1.put("key", rs.getString("campione"));
data1.put("value", rs.getString("f1"));
data2.put("name", "f2");
data2.put("key", rs.getString("campione"));
data2.put("value", rs.getString("f2"));
}
rs.close();
ps.close();
db.chiudiConnessione();
JSONObject json1 = new JSONObject(data1);
JSONObject json2 = new JSONObject(data2);
JSONArray array = new JSONArray();
array.put(json1);
array.put(json2);
JSONObject finalObject = new JSONObject();
finalObject.put("DeltaRealTime", array);
out.write(finalObject.toString());
}
}
catch(JSONException jse) {
jse.printStackTrace();
}
catch(Exception e) {
e.printStackTrace();
}
finally {
out.flush();
out.close();
System.out.println("Fine servlet grafico");
}
}
问题是我无法获得想要的行为。我只获得断开连接的点
提前感谢您的帮助:我发现了问题。这似乎是Internet Explorer上的JQUERY问题
$.getJSON('Grafico', function(data) { ... }
在IE11中不起作用
我把它换了
$.ajax({
type: $('#form1').attr('method'),
url: "Grafico",
cache:false,
dataType:'json',
success: function(data){
for (var i = 0; i < data.DeltaRealTime.length; i++){
chart1.series[i].addPoint([parseInt(data.DeltaRealTime[i].key),parseFloat(data.DeltaRealTime[i].value)]);
}
}
});
所有这些都工作得很好。$。getJSON描述:使用GET HTTP请求从服务器加载JSON编码的数据。然而,在servlet中有一个doPost方法,而不是doGet。很抱歉忽略了这个信息,但我的doGet方法只是对doPost方法的调用:protectedvoid doGetHttpServletRequest请求,HttpServletResponse响应抛出ServletException,IOException{doPostrequest,response;}。我建议的一点是,当所有内容都定义为$function时,JS很难读取{并且没有任何东西是像函数x那样的命名函数{如果您已经创建了调用Ajax的函数和成功处理程序func命名的函数,那么您可以在不同的点调用它们,而不必复制和粘贴它们的代码两次。这也可能使您更容易知道发生了什么,从而解决问题。只是想一想。我添加了doPost方法的finalObject.toString方法d打印出如下字符串:{DeltaRealTime:[{name:f1,value:20099506.5,key:362},{name:f2,value:20055460.1,key:362}]}其中36220099506.5是f1系列的x,y值,36220055460.1是f2系列的x,y值。现在返回json,如果是,则需要解析json,使其具有x/y值,而不是值/键。此外,所有值都应该是数字,但日期需要是时间戳时间(以毫秒为单位)。