当您谈论使用 Javascript 绘图解决方案时,请执行以下操作:
- 在页面加载时,您可以通过阅读完整的文本文件并记住它的大小来创建当前图表。
- 页面加载后,您创建一个 Javascript 函数,该函数使用 AJAX 技术 (
XMLHttpRequest) 定期轮询服务器上的特定脚本,并将文本文件的最后已知文件大小作为参数传递。
- 您的轮询脚本采用文件大小参数,打开文本文件,跳过文件,直到到达您上次读取文件的位置(文件大小参数)。
- 轮询脚本将所有可用数据从filesize返回到文件末尾和新文件站点
- 您的 Javascript 读取 AJAX 响应并将所需的绘图点添加到您的图表中
- 然后您可以使用新的文件大小作为参数重新轮询服务器端脚本
此过程涉及服务器端和客户端编程,但可以轻松完成。
以下是一个示例轮询脚本,它需要一个 index 参数,该参数告诉脚本从哪个位置读取文本文件并返回一个 JSON 编码的绘图点列表和新的索引指针。
// poll.php
$index = (isset($_GET['index'])) ? (int)$_GET['index'] : 0;
$file = fopen('path/to/your/file.txt', 'r');
$data = array(
'index' => null,
'data' => array()
);
// move forward to the designated position
fseek($file, $index, SEEK_SET);
while (!feof($file)) {
/*
* assuming we have a file that looks like
* 0,10
* 1,15
* 2,12
* ...
*/
list($x, $y) = explode(',', trim(fgets($handle)), 2);
$data['data'][] = array('x' => $x, 'y' => $y);
}
// set the new index
$data['index'] = ftell($file);
fclose($file);
header('Content-Type: application/json');
echo json_encode($data);
exit();
对应的 Javascript/jQuery sn-p 可以是:
// the jQuery code to poll the script
var current = 0;
function pollData() {
$.getJSON('poll.php', { 'index': current }, function(data) {
current = data.index;
for (var i= 0; i < data.data.length; i++) {
var x = data.data[i].x;
var y = data.data[i].y;
// do your plotting here
}
});
}
// call pollData() every 5 seconds
var timer = window.setInterval(pollData, 5000);
请注意,这只是一个示例,它缺少所有错误检查(例如,在同一页面上同时调用 pollData() 会出现问题)。