django highcharts通过ajax实现局部图表刷新

在网页中插入highcharts图表,图表数据来自后台mysql数据库。通过该网页提交的参数使highcharts图表更新。对此,图表刷新需通过ajax,局部刷新,并保持网页的设置参数不改变。全网页刷新会导致网页恢复到初始的静态网页,对网页变化的参数设置将全部丢失。

1 highcharts图表初始化

当网页加载初始化时,将触发highcharts初始化代码。django框架下,由url触发的views函数会提交图表输入数据。

$(document).ready(function() {  // jQuery网页加载初始化,实现highcharts的初始化。
	var title = { text:"new cases world" };
	var subtitle = { text: 'Source: https://www.worldometers.info/coronavirus' };
	var xAxis = { categories:{{Listx|safe}} };
	var yAxis = {  title: { text: 'New Cases' },
	plotLines: [{value: 0, width: 1, color: '#808080'}]  };   
	var tooltip = {valueSuffix: ''};
	var legend = {layout: 'vertical', align: 'right', verticalAlign: 'middle', borderWidth: 0, };
	var series =  [{name:'新增', data: {{Listy|safe}} }  ];
	var chart ={ type: 'spline' };   //平滑曲线:spline,
	var json = {};
	json.title = title;
	json.subtitle = subtitle;
	json.xAxis = xAxis;
	json.yAxis = yAxis;
	json.tooltip = tooltip;
	json.legend = legend;
	json.series = series;
	json.chart =chart;
	$('#container').highcharts(json);   //写入highcharts所在的标签,highcharts.js的导入必须放在同一个block。
  }); 

2 引发highcharts图表更新事件,传递到后端

图表更新由bootstrap提供的按钮下拉菜单触发。

$('#usa').on('click',  function() {
	$('#country').text('usa button');           // 写入 text
	$('#country').val('usa');               // 写入 value
	var a1 = document.getElementById('country1').value;
    var a2 = document.getElementById('disp1').value;
    myAjax(a1,a2);
});

网页中设置了两个按钮下拉菜单,分别提供曲线显示字段名和国家名称。当某个按钮下拉菜单事件触发时,将事件名称写入text(在按钮上显示事件);同时写入value(保存提取的事件)。ajax接口将两个按钮的当前value发送到后端程序,用于后端数据库提取。

3 ajax接口,更新highcharts

  • 通过ajax发送两个参数:国别country和显示字段名disp。返回函数success:function(data),data是后端程序返回的数据。
  • 组织好highcharts数据组json。
  • 将json写入网页标签 id=container
function myAjax(a,b){                  //Ajax函数
	$.ajax({
		url:"check", 
		type:"POST", 
        dataType: "json",  //json
		data:{
        	country: a,  //国别参数
            disp: b,     //显示字段名参数
            "csrfmiddlewaretoken": $("[name = 'csrfmiddlewaretoken']").val() ,//csft token
        },
		success:function(data){  // data形参就是异步提交的返回数据
			var x=data.Listx;
            x = eval("("+x+")");    //去掉json导致的方括号外面的双引号
            var y=data.Listy;
            y = eval("("+y+")");
            var title = { text:data.name };     //返回值1:曲线名称         
            var subtitle = { text: 'Source: https://www.worldometers.info/coronavirus' };
            var xAxis = { categories: x };       //返回值2:x坐标,时间值        
            var yAxis = {  title: { text: 'New Cases' },
            plotLines: [{value: 0, width: 1, color: '#808080'}]  };   
            var tooltip = {valueSuffix: ''};
            var legend = {layout: 'vertical', align: 'right', verticalAlign: 'middle', borderWidth: 0, };
            var series =  [{name:'新增', data:y}];            //返回值3:y坐标,浮点数值              
            var chart ={ type: 'spline' };   //平滑曲线:spline,折线:line。
            var json = {};
            json.title = title;
            json.subtitle = subtitle;
            json.xAxis = xAxis;
            json.yAxis = yAxis;
            json.tooltip = tooltip;
            json.legend = legend;
            json.series = series;
            json.chart =chart;
            $('#container').highcharts(json);    //写入id=container的标签,即highcharts图
		},  // success:function  
	});   //.ajax
}    //myAjax

本网页继承base.html,jQuery,bootstrap需放到网页body的前面的block中({% block scriptA %}{% endblock%}),highcharts.js和javascript代码放在最后一个block中({% block scriptB %}{% endblock%})。前面的block scriptA保证网页分栏,按钮下拉菜单实现,后面的block scriptB需将highcharts.js放在此处,否则不显示图表。
网页截图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值