我想使用“日期选择器”从数据库中获取数据以选择数据的日期范围,问题是我的数据没有保存在 var datapoints
上,但是console.log(result)
很好地显示了数据,我的代码是这样的:
测试.js
jQuery.extend({
dataRange: function(start, end) {
$.ajax({
type: "POST",
url: "some.php",
dataType: "json",
data: {date1: start, date2: end},
success: function(data){
var result = JSON.stringify(data);
console.log(result); //shows the data well
return result;
}
});
}
});
//initial data
var start = moment().format('YYYY-MM-DD');
var end = moment().subtract(7, 'days').format('YYYY-MM-DD');
var datapointsP;
$.dataRange(start, end)
.done(function(data) { //get error here
datapointsP = JSON.parse(data);
console.log(datapointsP); // this should print the necessary data
})
.fail(function(xhr) {
console.log('error', xhr);
});
然后在 some.php 上
$start = $_POST['date1'];
$end = $_POST['date2'];
$query = "select * from table where date between '" . $end . "' and '" . $start . "'";
$stmt = $pdo->prepare($query);
$stmt->execute();
$data = array();
for ($i = 0; $i < 24; $i++){
$data[] = 0;
}
while($row = $stmt->fetch()){
$data[$row['horas']] = ((int)$row['pot']);
}
$post_data = json_encode($data);
echo $post_data;
}
PD:由于这个问题,我仍然无法添加日期选择器。 提前致谢
最佳答案
$.ajax
执行异步HTTP (Ajax) 请求
。这意味着 $.ajax
不在同一个 Javascript 线程中执行。
因此,执行了 dataRange 函数并将 $.ajax 调用
传递给您的浏览器。然后它转到下一条语句并返回结果。现在,由于未声明结果,它会抛出 Uncaught ReferenceError
。
即使您从success
处理程序返回结果,变量datapoints
也将是undefined
,因为数据范围的执行已经完成并返回 undefined
。
要解决这个问题,你需要使用promise
。 $.ajax
返回可用于检索从请求返回的数据的 promise 。看看这个 link了解有关 promise 和 $.ajax 的更多信息。
jQuery.extend({
dataRange: function(start, end) {
return $.ajax({
type: "POST",
url: "some.php",
dataType: "json",
data: {date1: start, date2: end},
success: function(data){
var result = JSON.stringify(data);
console.log(result); //shows the data well
return result;
}
});
}
});
//initial data
var start = moment().format('YYYY-MM-DD');
var end = moment().subtract(7, 'days').format('YYYY-MM-DD');
var datapoints;
$.dataRange(start, end)
.done(function(data) {
datapoints = JSON.parse(data);
console.log(datapoints); // this should print the necessary data
})
.fail(function(xhr) {
console.log('error', xhr);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
关于javascript - 使用 AJAX 更新从数据库(mysql)检索的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46640058/