`
u010815305
  • 浏览: 30162 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

highstock使用案例(异步请求,懒加载)

 
阅读更多

资源:点击打开链接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,
	    	            }]
	    	        });
	    		}
	        });
		
	}



分享到:
评论

相关推荐

    javaHttp异步请求

    也可以使用`Future`的`get()`方法阻塞直到响应到达,但这违背了异步请求的初衷。 3. **Callback机制**: 异步请求的核心是回调函数。开发者可以定义一个实现了`FutureCallback&lt;HttpResponse&gt;`接口的类,覆盖`...

    一个Http异步请求的例子

    3. 发起异步请求:使用TIdHTTP的`Execute`方法发送请求。由于是异步的,`Execute`不会阻塞调用线程,而是立即返回,让程序可以继续执行其他任务。 4. 监听事件:在事件回调中,检查请求的状态,如OnWork事件中更新...

    java实现ztree异步加载

    5. **性能优化**:为了提高加载效率,可以考虑使用分页加载或者懒加载策略,只在用户展开特定节点时才加载其子节点。此外,还可以利用缓存机制减少不必要的数据库查询。 总结,Java实现ZTree异步加载涉及前端ZTree...

    bootstrap-treeview树节点实现动态加载(懒加载)

    动态加载(也称为懒加载)是一种优化性能的技术,只在用户需要时才加载数据,而不是一次性加载所有数据,这对于处理大量数据或层级结构尤其有用,可以显著提升页面加载速度和用户体验。 本项目在官方Bootstrap ...

    layui-tree实现Ajax异步请求后动态添加节点的方法

    在这个案例中,我们将通过 AJAX 请求动态填充数据。 当用户点击“添加分类”按钮时,我们需要监听该按钮的点击事件,执行以下步骤: 1. 获取当前选中的父节点信息,可能需要使用 layui.tree 的 API,如 `tree....

    基于libcurl 的http异步请求

    这个小程序只是简单的使用线程池实现了libcurl的异步请求功能,很多地方还需要优化,之所有厚颜上传到这里,主要有有三个目的。 一个是回报这些天在CSDN上得到的帮助,希望可以帮助到后来的人; 二是感于libcurl编译...

    HTTP异步请求数据Demo(C#)

    在C#中,我们可以通过调用HttpClient的GetAsync方法实现异步GET请求。例如: ```csharp using System.Net.Http; ... HttpClient client = new HttpClient(); Task&lt;HttpResponseMessage&gt; responseTask = client....

    百度Echarts代码,包含异步请求加载,加载特效,,asp.net,c#

    综上所述,这个压缩包提供了关于如何在ASP.NET和C#环境中集成ECharts,实现异步数据加载和加载特效的实践案例。开发者可以借此学习到前后端交互、数据处理以及ECharts图表的高级特性,提升数据可视化的技能。

    WPF中ItemsControl的异步加载

    异步加载的核心在于将数据加载过程与UI线程分离,这样即使数据加载耗时较长,也不会阻塞UI更新。在WPF中,我们可以通过以下步骤实现ItemsControl的异步加载: 1. 创建一个后台任务:可以使用Task.Run或者使用...

    QT C++ http get、post 同步异步请求

    本项目中,我们关注的是GET和POST两种请求方式,以及它们的同步和异步实现。下面将详细介绍这两种请求方式以及同步与异步的区别。 1. **QT中的HTTP GET请求** GET请求是最常见的HTTP请求类型,用于从服务器获取资源...

    jquery异步请求例子

    在实际项目中,我们可能还需要处理异步请求的状态,比如在请求正在进行时显示加载指示器,或者在请求完成时更新UI。jQuery的`.ajaxStart()`和`.ajaxStop()`方法可以帮助我们做到这一点: ```javascript $('.loading...

    layui异步加载table表中某一列数据的例子

    1. 异步请求的实现:使用layui的admin模块中的req方法发起异步请求。在此方法中,我们定义了请求的URL、请求方式(method)、数据类型(dataType)和请求完成后的回调函数(success)。需要注意的是,这里的回调函数用于...

    Flutter通过FutureBuilder实现异步请求网络数据并显示加载中Demo

    Flutter通过FutureBuilder实现异步请求网络数据并显示加载中Demo,详情请看博客Flutter中的异步(Future、async、await、FutureBuilder)和 网络请求:https://yuzhiqiang.blog.csdn.net/article/details/89155870

    Fragment实现懒加载

    "Fragment实现懒加载"是指在Fragment中采用一种策略,使得其内容只有在真正需要显示时才进行加载,从而提高应用性能和用户体验。这种方式特别适用于处理大量数据或者需要网络请求的情况,避免一次性加载所有内容导致...

    解析vue路由异步组件和懒加载案例

    在大型项目中,为了提高应用的加载速度和用户体验,我们常常会使用到异步组件和懒加载策略。本篇文章将深入解析Vue路由中的异步组件和懒加载,并通过一个案例来展示它们的实现方式。 ### 1. 原理 **异步组件** 是...

    unity实现场景异步加载并带有加载的进度条

    unity实现场景异步加载并带有加载的进度条,实现场景平稳加载,返回的加载进度为匀速加载。非常适合用在要加载大型场景的情况下。

    Hessian异步请求访问包

    本知识点主要关注的是在Android平台上,如何使用Hessian进行异步请求访问,以便提高应用程序的性能和用户体验。 Hessian是由Caucho公司开发的一种轻量级、高效的RPC(Remote Procedure Call)协议。它将Java对象...

    iOS 同步异步网络请求

    对于可能耗时的操作,如加载大量数据,异步请求尤为重要。 5. **Demo-0402**: 这个文件名可能代表一个示例代码,可能包含了如何在iOS中实现POST和GET同步/异步请求的代码实例。通常,这样的示例会涵盖创建URL请求...

    懒加载版本表格树

    6. **异步处理**:数据加载通常涉及网络请求,因此应使用异步操作,以避免阻塞用户界面。 7. **分页策略**:根据数据量,可能需要采用分页策略,每次只加载一定数量的子节点,而不是一次性加载所有。 在`...

    lazyload异步加载图片

    **懒加载(Lazy Load)异步加载图片技术详解** 懒加载是一种优化网页性能的技术,它主要应用于图片或者视频等大体积资源的加载。在网页初次加载时,只加载视口内的图片,当用户滚动页面,即将进入视口的图片才会被...

Global site tag (gtag.js) - Google Analytics