我对chart.js、php和infomix数据库有问题吗?
Helloi在chart.js、php和informix数据库方面存在问题 首先,我用easy mysql数据库测试了脚本,它们运行良好 但当我将informix数据库与pdo一起使用时,他会在未定义的图表标签上显示给我 =>连接到数据库的my data.php:我对chart.js、php和infomix数据库有问题吗?,php,pdo,chart.js,informix,Php,Pdo,Chart.js,Informix,Helloi在chart.js、php和informix数据库方面存在问题 首先,我用easy mysql数据库测试了脚本,它们运行良好 但当我将informix数据库与pdo一起使用时,他会在未定义的图表标签上显示给我 =>连接到数据库的my data.php: <?php header('Content-Type: application/json'); $db=new pdo("informix:host=uccxpub;service=1504;database=db_cra;
<?php
header('Content-Type: application/json');
$db=new pdo("informix:host=uccxpub;service=1504;database=db_cra;server=uccxpub_uccx;protocol=onsoctcp;EnableScrollabelCursors=1;client_local=en_US.UTF8;db_locale=en_US.UTF8","uccxwallboard","cisco2016"
) or die("Impossible de se connecter !!!");
$sql0 = sprintf("SELECT * FROM RtCSQsSummary where CSQName = 'BMCE BANK'");
/*$stmt = $db->prepare($sql0);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
*/
$result = $db->query($sql0);
//loop through the returned data
$data = array();
foreach ($result as $row) {
$data[] = $row;
}
//now print the data
print json_encode($data);
?>
=>输出:
=>my index.html:
<!DOCTYPE html>
<html>
<head>
<title>ChartJS - BarGraph</title>
<style type="text/css">
#chart-container {
width: 640px;
height: auto;
}
</style>
</head>
<body>
<div id="chart-container">
<canvas id="mycanvas"></canvas>
</div>
<!-- javascript -->
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/Chart.min.js"></script>
<script type="text/javascript" src="js/bargraph.js"></script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<title>ChartJS - BarGraph</title>
<style type="text/css">
#chart-container {
width: 640px;
height: auto;
}
</style>
</head>
<body>
<div id="chart-container">
<canvas id="mycanvas"></canvas>
</div>
<!-- javascript -->
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/Chart.min.js"></script>
<script type="text/javascript" src="js/bargraph.js"></script>
</body>
</html>
=>index.html:
<!DOCTYPE html>
<html>
<head>
<title>ChartJS - BarGraph</title>
<style type="text/css">
#chart-container {
width: 640px;
height: auto;
}
</style>
</head>
<body>
<div id="chart-container">
<canvas id="mycanvas"></canvas>
</div>
<!-- javascript -->
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/Chart.min.js"></script>
<script type="text/javascript" src="js/bargraph.js"></script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<title>ChartJS - BarGraph</title>
<style type="text/css">
#chart-container {
width: 640px;
height: auto;
}
</style>
</head>
<body>
<div id="chart-container">
<canvas id="mycanvas"></canvas>
</div>
<!-- javascript -->
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/Chart.min.js"></script>
<script type="text/javascript" src="js/bargraph.js"></script>
</body>
</html>
他工作得很好。我在Linux机器上运行了你的代码,并做了一些小的修改。我可以用Informix数据库中的一些简单测试数据显示条形图: html页面:
informix@irk:/var/www/html# cat test.html
<!DOCTYPE html>
<html>
<head>
<title>ChartJS - BarGraph</title>
<style type="text/css">
#chart-container {
width: 640px;
height: auto;
}
</style>
</head>
<body>
<div id="chart-container">
<canvas id="mycanvas"></canvas>
</div>
<!-- javascript -->
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js"></script>
<script src="http://irk/b.js"></script>
</body>
</html>
informix@irk:/var/www/html#
从Informix获取数据的php脚本:
informix@irk:/var/www/html# cat data.php
<?php
$db=new pdo("informix:database=enusutf8;server=irk1210;CLIENT_LOCALE=en_US.UTF8;DB_LOCALE=en_US.UTF8","informix","testpwd") or die("Impossible de se connecter !!!");
$sql0 = sprintf("SELECT * FROM RtCSQsSummary where CSQName = 'BMCE BANK'");
$result = $db->query($sql0);
$data = array();
foreach ($result as $row) {
$data[] = $row;
}
print json_encode($data);
?>
informix@irk:/var/www/html#
除了前面提到的大写/小写之外,JS函数获取的JSON数据
必须先解析,然后才能使用。否则,无论使用何种情况,都会在“forvar i in data”循环中得到未定义的值。谢谢。另外,仅供参考,请看-您正在与提供空闲时间的志愿者交谈。说这是一个非常紧迫的问题可能意味着你的时间比回答问题的人的时间更宝贵。这不是一个鼓励人们帮助你的好方法。不管怎样,你声称当你更改数据库时,它就停止工作了。但是输出的图片看起来像是有效的JSON。所以它显然产生了一些结果。您是否尝试过将连接到mySQL时生成的输出与连接到informix时生成的输出进行比较,看看有什么区别?Chart.js不关心您使用了什么数据库,它只关心它收到的JSON。@ADyson我纠正了我的问题,所以关于使用mysql,我创建了相同的informix表,他工作得很好。当我把它改成informix数据库时,他不再工作了。你需要更深入地挖掘——见我上面的评论。我只能看到informix版本的输出,而不能看到mysql版本的输出。正如我所说,chart.js不知道您更改了数据库,它只知道您的JSON。因此,如果更改数据库和任何相关代码会产生问题,那么首先需要比较它们生成的JSON,看看是否有差异。如果有,那么您需要找出造成差异的原因,无论是不同的代码还是不同的数据。这只是简单的调试技术,正如ADyson之前所说,标签未定义错误是因为Informix PDO驱动程序以大写形式返回列名,而JS代码希望数据以小写形式返回。试着把它改成大写。e、 g:data[i]。STARTDATETIME而不是data[i]。STARTDATETIME和data[i]。LOGGEDINAGENTS而不是data[i]。LOGGEDINAGENTS在“bargraph.js”中
informix@irk:/var/www/html# cat b.js
$(document).ready(function(){
$.ajax({
url: "http://irk/data.php",
method: "GET",
success: function(data) {
var obj=JSON.parse(data);
data=obj;
var startdatetime = [];
var loggedInAgents = [];
for(var i in data) {
startdatetime.push( data[i].STARTDATETIME);
loggedInAgents.push(data[i].LOGGEDINAGENTS);
}
var chartdata = {
labels: startdatetime,
datasets : [
{
label: 'loggedInAgents',
backgroundColor: 'rgba(200, 200, 200, 0.75)',
borderColor: 'rgba(200, 200, 200, 0.75)',
hoverBackgroundColor: 'rgba(200, 200, 200, 1)',
hoverBorderColor: 'rgba(200, 200, 200, 1)',
data: loggedInAgents
}
]
};
var ctx = $("#mycanvas");
var barGraph = new Chart(ctx, {
type: 'bar',
data: chartdata
});
},
error: function(data) {
console.log(data);
}
});
});
informix@irk:/var/www/html#
informix@irk:/var/www/html# cat data.php
<?php
$db=new pdo("informix:database=enusutf8;server=irk1210;CLIENT_LOCALE=en_US.UTF8;DB_LOCALE=en_US.UTF8","informix","testpwd") or die("Impossible de se connecter !!!");
$sql0 = sprintf("SELECT * FROM RtCSQsSummary where CSQName = 'BMCE BANK'");
$result = $db->query($sql0);
$data = array();
foreach ($result as $row) {
$data[] = $row;
}
print json_encode($data);
?>
informix@irk:/var/www/html#