javascript - 使用 AJAX 更新从数据库(mysql)检索的数据

标签 javascript php jquery ajax

我想使用“日期选择器”从数据库中获取数据以选择数据的日期范围,问题是我的数据没有保存在 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/

相关文章:

javascript - 从孙子导航到父级时,AngularJS UI 路由器数据仍然存在

php - Yii2 链接和表单操作总是返回到 'localhost'(错误的基本 URL)

php - PDO::PARAM 日期?

PHP 将数组转换为对象

javascript - AngularJS 指令不显示模板

javascript - 根据不正确的输入预测 JavaScript 字符串

javascript - backgroundColor 不是背景色

jquery - 将 FullCalendar 日期传递到我的对话框模态表单

javascript:发布到 api 时序列化/反序列化类实例

javascript - 一页 Bootstrap 下拉菜单不适用于移动设备