我想使用“日期选择器”从数据库中获取数据来选择数据的日期范围,问题是我的数据没有保存在var datapoints
上,而是{{1我很好地显示了数据,我的代码是这样的:
test.js
console.log(result)
然后在some.php上
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);
});
PD:由于这个问题,我仍然无法添加datepicker。 提前致谢
答案 0 :(得分:1)
$.ajax
执行异步HTTP (Ajax) request
。这意味着$.ajax
不会在同一个Javascript线程中执行。
因此,执行dataRange函数并将$.ajax call
传递给您的浏览器。然后它转到下一个语句并返回结果。现在,由于未声明结果,它会抛出Uncaught ReferenceError
。
即使您从success
处理程序返回结果,变量datapoints
也将是undefined
,因为数据范围的执行已经完成并返回undefined
。< / p>
要解决此问题,您需要使用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);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
答案 1 :(得分:0)
以wron方式从dataRange返回结果,您应该在ajax success
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;
}
});
}
});