Javascript 使用AJAX从数据库(mysql)更新数据检索
我想使用“日期选择器”从数据库获取数据,以选择数据的日期范围,问题是我的数据没有保存在Javascript 使用AJAX从数据库(mysql)更新数据检索,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我想使用“日期选择器”从数据库获取数据,以选择数据的日期范围,问题是我的数据没有保存在var datapoints上,但是console.log(result)非常好地显示了数据,我的代码如下: test.js jQuery.extend({ dataRange: function(start, end) { $.ajax({ type: "POST", url: "some.php",
var datapoints
上,但是console.log(result)
非常好地显示了数据,我的代码如下:
test.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;
}
$start=$\u POST['date1'];
$end=$_POST['date2'];
$query=“从日期介于“”之间的表中选择*”$结束。“‘和’”$开始"'";
$stmt=$pdo->prepare($query);
$stmt->execute();
$data=array();
对于($i=0;$i<24;$i++){
$data[]=0;
}
而($row=$stmt->fetch()){
$data[$row['horas']]=((int)$row['pot']);
}
$post_data=json_encode($data);
echo$post_数据;
}
PD:由于这个问题,我仍然无法添加日期选择器。
提前感谢您从dataRange以wron方式返回结果,您应该在
ajax成功
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;
}
});
}
});
$.ajax
执行异步HTTP(ajax)请求
。这意味着$.ajax
不会在同一个Javascript线程中执行
因此,执行dataRange函数,并将$.ajax调用
传递给浏览器。然后它转到下一个语句并返回结果。现在,由于未声明结果,它抛出uncaughtreferenceerror
即使从success
处理程序返回结果,变量datapoints
也将未定义
,因为数据范围的执行已经完成并返回未定义
要解决这个问题,您需要使用promise
<代码>$。ajax返回一个承诺,可用于检索从请求返回的数据。查看本文,了解有关promise和$.ajax的更多信息
jQuery.extend({
数据范围:函数(开始、结束){
返回$.ajax({
类型:“POST”,
url:“some.php”,
数据类型:“json”,
数据:{date1:start,date2:end},
成功:函数(数据){
var result=JSON.stringify(数据);
console.log(result);//很好地显示了数据
返回结果;
}
});
}
});
//初始数据
var start=moment().格式('YYYY-MM-DD');
var end=moment().减去(7,'天').格式('YYYY-MM-DD');
var数据点;
$.dataRange(开始、结束)
.完成(功能(数据){
datapoints=JSON.parse(数据);
console.log(datapoints);//这应该打印必要的数据
})
.失败(功能(xhr){
console.log('error',xhr);
});代码>
您希望如何使用超出其范围的变量?您完全正确!,现在,我的JSON.parse($.dataRange(start,end))
似乎遇到了问题,语法错误:JSON.parse()的位置0处JSON中出现了意外的标记u在test.js:95中,这意味着什么?当数据类型为json
时,请不要使用json parse
,因为这是不必要的,因为您已经在Santiago Centeron some.php上获得了json值。我打印了一个json编码($array),如何在test.js上将其检索为数组?Uncaught TypeError:无法读取undefined的属性'done'似乎我做错了什么?是否从dataRange函数返回$.ajax?结果是和json数组,可以在some.phpSo中看到,结果变量是正确的,对吗?你能告诉我当你做console.log($.dataRange(start,end))时会显示什么吗;它返回“undefined”,但返回console.log(result);返回如下字符串[1,2,3,4,5,6,…]