使用AJAX从数据库(mysql)更新数据

时间:2017-10-09 06:29:58

标签: javascript php jquery ajax

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

2 个答案:

答案 0 :(得分:1)

$.ajax执行异步HTTP (Ajax) request。这意味着$.ajax不会在同一个Javascript线程中执行。

因此,执行dataRange函数并将$.ajax call传递给您的浏览器。然后它转到下一个语句并返回结果。现在,由于未声明结果,它会抛出Uncaught ReferenceError

即使您从success处理程序返回结果,变量datapoints也将是undefined,因为数据范围的执行已经完成并返回undefined。< / p>

要解决此问题,您需要使用promise$.ajax返回一个promise,可用于检索从请求返回的数据。查看此link以了解有关promise和$ .ajax的更多信息。

&#13;
&#13;
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;
&#13;
&#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; 
            }
        });

    }
});