通过PHP在JavaScript中按时间间隔查询MySQL
基本上,我想使用外部PHP脚本查询MySQL数据库。我希望每2秒调用一次此脚本。这2秒的时间间隔由javascript jquery flot启动,如下所示:通过PHP在JavaScript中按时间间隔查询MySQL,javascript,php,jquery,mysql,ajax,Javascript,Php,Jquery,Mysql,Ajax,基本上,我想使用外部PHP脚本查询MySQL数据库。我希望每2秒调用一次此脚本。这2秒的时间间隔由javascript jquery flot启动,如下所示: <script type='text/javascript'> var data = []; var dataset; var totalPoints = 50; var updateInterval = 1000; var now = new Date().getTime();
<script type='text/javascript'>
var data = [];
var dataset;
var totalPoints = 50;
var updateInterval = 1000;
var now = new Date().getTime();
function GetData() {
data.shift();
while (data.length < totalPoints) {
var y;
$.ajax({
url: 'current_api.php',
success: function(currentValue){
y = currentValue;
console.log(y);
},
});
var temp = [now += updateInterval, y];
data.push(temp);
}
}
var options = {
...
}
$(document).ready(function () {
GetData();
dataset = [
{ label: "CURRENT READING", data: data }
];
$.plot($("#flot-line-chart"), dataset, options);
function update() {
GetData();
$.plot($("#flot-line-chart"), dataset, options)
setTimeout(update, updateInterval);
}
update();
});
</script>
<?php
require "dbCon.php"; // database credentials
$databaseName = "MAIN";
$tableName = "day"
// OPEN MYSQL DATABASE CONNECTION IN PHP
$dbs = mysql_select_db($databaseName, $con);
// FETCH DATA FROM MYSQL DATABASE
$sql = "SELECT value FROM $tableName ORDER BY id DESC LIMIT 1";
$result = mysql_query($sql);
header('Content-Type: application/json');
while ($row = mysql_fetch_assoc($result)) {
$currentValue = (int) round($row['value']);
}
echo json_encode($currentValue);
// CLOSE THE DB CONNECTION
mysql_close($con);
?>
我是AJAX新手,不知道我所尝试的是否可行。有人能帮我调试为什么得到空值吗?提前感谢。您正在ajax脚本中调用current_api.php,没有任何数据。因此没有查询字符串,没有$\u GET['dbSelect'],也没有数据库。因此,json只包含一个未定义的变量NULL
除此之外,这是不正确的,您不能使用转义函数来清理用户提供的表名,您需要对照白名单检查它。明白了
$.ajax({
dataType: "json",//insert line: receive data from server to json
url: 'current_api.php?dbSelect=123', //a method
/* a method other
type:"GET",
data:{dbSelect:dbSelect},
url: 'current_api.php',
*/
success: function(currentValue){
y = currentValue[0];///edit code y = currentValue
console.log(y);
},
});
问题是在$.ajax中声明变量y和url。感谢和的提示
javascript应该是:
<script type='text/javascript'>
var data = [];
var dataset;
var totalPoints = 50;
var updateInterval = 1000;
var now = new Date().getTime();
var y;
function GetData() {
data.shift();
while (data.length < totalPoints) {
$.ajax({
url: 'current_api.php?dbSelect=R9640E5F1E2',
success: function(currentValue) {
y = currentValue;
console.log(currentValue);
},
});
var temp = [now += updateInterval, y];
data.push(temp);
}
}
var options = {
...
}
$(document).ready(function () {
GetData();
dataset = [
{ label: "CURRENT READING", data: data }
];
$.plot($("#flot-line-chart"), dataset, options);
function update() {
GetData();
$.plot($("#flot-line-chart"), dataset, options)
setTimeout(update, updateInterval);
}
update();
});
</script>
其中R9640E5F1E2是数据库;PHP保持原样:
现在转到另一个问题。。。javascripts中的查询字符串。为什么使用while循环来获取查询结果,而它只能返回一行?为什么不使用HTTP缓存?带有eTag标头的HEAD查询。您可以优化您的SQL查询:从$tableName ORDER BY id DESC LIMIT 1中选择值您不应该转义给定给mysql的数据库名称\u SELECT\u db。您只需要转义被替换为SQL的字符串。打开开发者工具,转到网络选项卡,检查对AJAX请求的响应。确保它只包含您正在发送的JSON,而不包含任何其他内容。您需要将var temp和data.push行放入success函数中。用于$\u GET['dbSelect']的查询字符串运行良好。。。对不起,如果我没有包括其他PHP文件,处理这个项目的不同部分。我已经编辑了PHP代码以减少混淆…:感谢提醒,他的PHP发送内容类型:application/json header.$。ajax使用它来确定默认的数据类型。y=currentValue[0]上的[0]是否为默认值;有区别吗?我只是每隔2秒钟查询一行数据。据我所知,[]表示数组中的一个位置。在AJAX中也是这样吗?