资源:
点击打开链接highstock 中文官网。
jsp中导入:<script src="<c:url value="/resources/js/highstock.js"></c:url>"></script>
jsp页面加入
<div id="historyChart" style="min-width:1050px;height:350px"></div>
<div class="tab-pane fade" id="tab-friends">
<div class="row">
<div class="radio" id="radio">
<div class="col-md-2">
<input type="radio" name="dimension" id="total"
value="total" checked="checked"> <label
for="total">总计</label>
</div>
<c:forEach var="item" items="${dimensionValues}">
<div class="col-md-2">
<input type="radio" name="dimension" id="${item}"
value="${item}" > <label
for="${item}"> ${item}</label>
</div>
</c:forEach>
</div>
</div>
<div class="alert alert-info fade in" id ="warningInfo" style="display: none;">
<button type="button" class="close" id = "warnningButton" data-dismiss=""
aria-hidden="">×</button>
<i class="fa fa-info-circle fa-fw fa-lg"></i> <strong></strong> 您查找的无记录!
</div>
<br><br>
<div id="historyChart" style="min-width:1050px;height:350px"></div>
</div>
后台穿过类的数据封装
@RequestMapping(value = "/comm/gethistorydata", method = RequestMethod.POST)
public @ResponseBody JSONArray getHistoryData(String dimension,String metric,String start,
String end,String businessType,String dimensionValue) {
LeftNavParemeter navParameter = new LeftNavParemeter();
Calendar calendar = Calendar.getInstance();
if (start == null && end == null) {
end = DateUtils.format(new Date(), DateUtils.DATE_YYYY_MM_DD);// 测试数据2015-03-20
Date date = DateUtils.parse(end, DateUtils.DATE_YYYY_MM_DD);
calendar.setTime(date);
calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR) - 1);
Date preDate = calendar.getTime();
start = DateUtils.format(preDate);
}
navParameter.setStartDate(start);
navParameter.setEndDate(end);
navParameter.setDimensionName(dimension);
navParameter.setMetric(metric);
navParameter.setBusinessType(businessType);
if (!start.contains("-")) {
<span style="white-space:pre"> </span>//根据时间的选择进行懒加载数据
JSONArray json = getMinuteHistory(navParameter, dimensionValue);
return json;
}
SimpleDateFormat spf = new SimpleDateFormat("yyyy-MM-dd");
Map<Date,Integer> valueMap = new LinkedHashMap<Date, Integer>();
try {
List<LoginCommDimension> loginCommDimensionList = loginService
.findCommByDimensionValue(navParameter);
JSONArray dimensionValues = JSON.parseArray(currentnav
.getDimension().getDimensionValues());
JSONArray jsonarr = new JSONArray();
for (int i = 0; i < loginCommDimensionList.size(); i++) {
LoginCommDimension item = loginCommDimensionList.get(i);
JSONObject parseObject = JSONObject.parseObject(item
.getDimensionValue());
Date date = spf.parse(item.getDate());
if (dimensionValue.equals("total")) {
if(valueMap.get(date)==null){
valueMap.put(date,item.getTotal());
}else{
valueMap.put(date, valueMap.get(date)+item.getTotal());
}
continue;
}
for (Object value : dimensionValues) {
if (value.toString().equals(dimensionValue)) {
if (parseObject.containsKey(value)) {
if(valueMap.get(date)==null){
valueMap.put(date,(Integer)parseObject.get(value));
}else{
valueMap.put(date, valueMap.get(date)+(Integer)parseObject.get(value));
}
}
}
}
}
for(Entry<Date, Integer> entry : valueMap.entrySet()){
Object[] obj = new Object[2];
obj[0] = entry.getKey();
obj[1] = entry.getValue();
jsonarr.add(obj);
}
return jsonarr;//返回jsonarray类型
} catch (ParseException e) {
throw new RuntimeException();
}
}
前台js代码:
function afterSetExtremes(e) {//懒加载,当数据量比较大的时候使用。
navParameters.metric = getCheckedMetric();
var parameter = JSON.stringify(navParameters);
var chart = $('#historyChart').highcharts();
chart.showLoading('Loading data from server...');
$.ajax({
url : 'comm/gethistorydata',
type : 'post',
data : {'start': Math.round(e.min),'end':Math.round(e.max),
'dimensionValue':dimensionValue,'businessType':navParameters.businessType,
'dimension':navParameters.dimensionName,'metric':navParameters.metric},
dataType : 'json',
success : function(data) {
chart.series[0].setData(data);
chart.hideLoading();
}
});
}
function getHistory(){
navParameters.metric = getCheckedMetric();
$.ajax({
url : 'comm/gethistorydata',
type : 'post',
data : {
'dimensionValue':dimensionValue,'businessType':navParameters.businessType,
'dimension':navParameters.dimensionName,'metric':navParameters.metric},
dataType : 'json',
success : function(data) {
if(!isBlank(data)){
$("#warningInfo").hide();
}else{
$("#warningInfo").show();
$("#historyChart").html("");
return;
}
var currentDate = new Date();
data = [].concat(data, [[Date.UTC(currentDate.getFullYear(),
currentDate.getMonth(),
currentDate.getDate(), 16, 00),
0]]);
$('#historyChart').highcharts('StockChart', {
chart : {
type: 'spline',
zoomType:'x',
borderColor : '#EBBA95',
borderWidth : 1
},
navigator : {
adaptToUpdatedData: false,
series : {
data : data
},
xAxis : {
dateTimeLabelFormats:{
second: '%H:%M:%S',
minute: '%H:%M',
hour: '%H:%M',
day: '%m-%d', //'%Y<br/>%m-%d'
week: '%m-%d',
month: '%m',
year: '%Y'
}
}
},
scrollbar: {
liveRedraw: true
},
rangeSelector : {
buttons: [{
type: 'hour',
count: 1,
text: '1小时'
},{
type: 'day',
count: 1,
text: '1天'
}, {
type: 'all',
text: '全部'
}],
inputEnabled: false, // it supports only days
selected : 2 // all
},
credits:{enabled:false},
xAxis : {
events : {
afterSetExtremes : afterSetExtremes
},
dateTimeLabelFormats:{
second: '%H:%M:%S',
minute: '%H:%M',
hour: '%H:%M',
day: '%m-%d', //'%Y<br/>%m-%d'
week: '%m-%d',
month: '%m',
year: '%Y'
}
},
yAxis: {
floor: 0
},
tooltip: {
pointFormat: '<span style="color:{series.color}">'+dimensionValue+'</span>: <b>{point.y}</b><br/>',
},
series : [{
data : data,
}]
});
}
});
}
分享到:
相关推荐
也可以使用`Future`的`get()`方法阻塞直到响应到达,但这违背了异步请求的初衷。 3. **Callback机制**: 异步请求的核心是回调函数。开发者可以定义一个实现了`FutureCallback<HttpResponse>`接口的类,覆盖`...
3. 发起异步请求:使用TIdHTTP的`Execute`方法发送请求。由于是异步的,`Execute`不会阻塞调用线程,而是立即返回,让程序可以继续执行其他任务。 4. 监听事件:在事件回调中,检查请求的状态,如OnWork事件中更新...
5. **性能优化**:为了提高加载效率,可以考虑使用分页加载或者懒加载策略,只在用户展开特定节点时才加载其子节点。此外,还可以利用缓存机制减少不必要的数据库查询。 总结,Java实现ZTree异步加载涉及前端ZTree...
动态加载(也称为懒加载)是一种优化性能的技术,只在用户需要时才加载数据,而不是一次性加载所有数据,这对于处理大量数据或层级结构尤其有用,可以显著提升页面加载速度和用户体验。 本项目在官方Bootstrap ...
在这个案例中,我们将通过 AJAX 请求动态填充数据。 当用户点击“添加分类”按钮时,我们需要监听该按钮的点击事件,执行以下步骤: 1. 获取当前选中的父节点信息,可能需要使用 layui.tree 的 API,如 `tree....
这个小程序只是简单的使用线程池实现了libcurl的异步请求功能,很多地方还需要优化,之所有厚颜上传到这里,主要有有三个目的。 一个是回报这些天在CSDN上得到的帮助,希望可以帮助到后来的人; 二是感于libcurl编译...
在C#中,我们可以通过调用HttpClient的GetAsync方法实现异步GET请求。例如: ```csharp using System.Net.Http; ... HttpClient client = new HttpClient(); Task<HttpResponseMessage> responseTask = client....
综上所述,这个压缩包提供了关于如何在ASP.NET和C#环境中集成ECharts,实现异步数据加载和加载特效的实践案例。开发者可以借此学习到前后端交互、数据处理以及ECharts图表的高级特性,提升数据可视化的技能。
异步加载的核心在于将数据加载过程与UI线程分离,这样即使数据加载耗时较长,也不会阻塞UI更新。在WPF中,我们可以通过以下步骤实现ItemsControl的异步加载: 1. 创建一个后台任务:可以使用Task.Run或者使用...
本项目中,我们关注的是GET和POST两种请求方式,以及它们的同步和异步实现。下面将详细介绍这两种请求方式以及同步与异步的区别。 1. **QT中的HTTP GET请求** GET请求是最常见的HTTP请求类型,用于从服务器获取资源...
在实际项目中,我们可能还需要处理异步请求的状态,比如在请求正在进行时显示加载指示器,或者在请求完成时更新UI。jQuery的`.ajaxStart()`和`.ajaxStop()`方法可以帮助我们做到这一点: ```javascript $('.loading...
1. 异步请求的实现:使用layui的admin模块中的req方法发起异步请求。在此方法中,我们定义了请求的URL、请求方式(method)、数据类型(dataType)和请求完成后的回调函数(success)。需要注意的是,这里的回调函数用于...
Flutter通过FutureBuilder实现异步请求网络数据并显示加载中Demo,详情请看博客Flutter中的异步(Future、async、await、FutureBuilder)和 网络请求:https://yuzhiqiang.blog.csdn.net/article/details/89155870
"Fragment实现懒加载"是指在Fragment中采用一种策略,使得其内容只有在真正需要显示时才进行加载,从而提高应用性能和用户体验。这种方式特别适用于处理大量数据或者需要网络请求的情况,避免一次性加载所有内容导致...
在大型项目中,为了提高应用的加载速度和用户体验,我们常常会使用到异步组件和懒加载策略。本篇文章将深入解析Vue路由中的异步组件和懒加载,并通过一个案例来展示它们的实现方式。 ### 1. 原理 **异步组件** 是...
unity实现场景异步加载并带有加载的进度条,实现场景平稳加载,返回的加载进度为匀速加载。非常适合用在要加载大型场景的情况下。
本知识点主要关注的是在Android平台上,如何使用Hessian进行异步请求访问,以便提高应用程序的性能和用户体验。 Hessian是由Caucho公司开发的一种轻量级、高效的RPC(Remote Procedure Call)协议。它将Java对象...
对于可能耗时的操作,如加载大量数据,异步请求尤为重要。 5. **Demo-0402**: 这个文件名可能代表一个示例代码,可能包含了如何在iOS中实现POST和GET同步/异步请求的代码实例。通常,这样的示例会涵盖创建URL请求...
6. **异步处理**:数据加载通常涉及网络请求,因此应使用异步操作,以避免阻塞用户界面。 7. **分页策略**:根据数据量,可能需要采用分页策略,每次只加载一定数量的子节点,而不是一次性加载所有。 在`...
**懒加载(Lazy Load)异步加载图片技术详解** 懒加载是一种优化网页性能的技术,它主要应用于图片或者视频等大体积资源的加载。在网页初次加载时,只加载视口内的图片,当用户滚动页面,即将进入视口的图片才会被...