javascript - 在任何图表中更新股票价格而不重新绘制整个图表
问题描述
我正在使用非常好的 Anychart 股票烛台图表,为了更新图表,我使用了一个setInterval
函数,但它重新绘制了整个图表,这很糟糕,因为如果我正在缩放或其他东西,它显然会重置并重新开始。有没有办法我可以每隔几秒钟从数据库中更新最后一个价格而不重新绘制整个图表?
当前setInterval
加载图表的功能:
setInterval(function() {
$.get('chart_data.php', function(data) {
$(".main_cont").replaceWith(data);
});
}, 2000);
我的 chart_data 变量:
$chart_data .= "{'x':'".$open_time."','open': ".$open.",'high': ".$high.",'low': ".$low.",'close': ".$close."},";
chart_data.php
文件:
anychart.onDocumentReady(function() {
// create a data table
var table = anychart.data.table('x');
// add data
table.addData([<?php echo $chart_data;?>]);
// add data
//table.addData([ {'x':'08/09/2020 10:11','open': 11000,'high': 10000,'low': 8000,'close': 8500}]);
// create a stock chart
var chart = anychart.stock(true);
// create a mapping
var mapping = table.mapAs({
'date': 'date',
'open': 'open',
'high': 'high',
'low': 'low',
'close': 'close',
'fill': 'fill'
});
var plot = chart.plot(0);
// add a series using the mapping
chart.plot(0).candlestick(mapping).name();
// set container id for the chart
chart.container('container');
var series = chart.plot(0).candlestick(mapping);
chart.scroller().xAxis(false);
// initiate chart drawing
chart.draw();
});
我想setInterval
用仅替换数据库中的最后一个价格数据以向上或向下移动蜡烛的功能替换该函数,如果添加了新记录,则绘制新的蜡烛。我有脚本来更新蜡烛或添加新蜡烛我只是找不到不重新绘制整个图表的方法。
解决方案
您可以使用处理数据的函数来更改图表。
你可以使用 JS 每两秒获取一次新数据,并使用 JSaddData()
替换现有数据。如果这仍然导致完全刷新,则必须比较两个数组之间的差异以确定当前数据和新获取的数据之间的差异,并使用文档中描述的insert
,delete
和update
方法来仅更改更改的数据。但是,这仍可能导致完全刷新。
您将使用 AJAX(来自 JS)从 PHP 脚本请求更新的数据。数据将返回到您的 JS。通过jQuery.getJSON发送/接收 JSON 格式的数据可能是最简单的。
推荐阅读
- python - Python 3.1 中的无限 While 循环问题
- sql - 如何在 SQL Server 中提取多个子字符串关键字并在多列中显示结果?
- tcl - 在特定字符后返回字符串
- mysql - 如何在创建表命令中指定日期格式
- python - 在 python 上安装包时出错
- linq - 实体框架 | GroupBy 和 Sum
- python - Boost.Python.ArgumentError:World.set(World, str) 中的 Python 参数类型与 C++ 签名不匹配:set(World {lvalue}, std::string)
- typescript - 打字稿:访问数组元素不考虑未定义返回值的可能性
- django - 如何让 django-allauth 发送 html 电子邮件
- powershell - Powershell:模块内外的引用类