【问题标题】:Use AJAX to update data retrive from databse(mysql)使用 AJAX 更新从数据库检索的数据(mysql)
【发布时间】:2017-10-09 06:29:57
【问题描述】:

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

PD:由于这个问题,我仍然无法添加日期选择器。 提前致谢

【问题讨论】:

  • 您希望如何使用超出其范围的变量?

标签: javascript php jquery ajax


【解决方案1】:

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

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

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

要解决这个问题,您需要使用promise$.ajax 返回一个承诺,可用于检索从请求返回的数据。查看此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);
  });
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt;

【讨论】:

  • Uncaught TypeError: Cannot read property 'done' of undefined 好像我做错了什么?
  • 你是从 dataRange 函数返回 $.ajax 吗?
  • 结果是和json数组,可以在some.php中看到
  • 那么,结果变量是正确的,对吧?您能告诉我执行 console.log($.dataRange(start, end)); 时显示的内容吗?
  • 它返回“未定义”但 console.log(result);返回这样的字符串 [1, 2, 3, 4, 5, 6,...,]
【解决方案2】:

您以错误的方式从 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; 
            }
        });

    }
});

【讨论】:

  • 你完全正确!现在看来我的 JSON.parse($.dataRange(start, end)) 有问题
  • Uncaught SyntaxError: Unexpected token u in JSON at JSON.parse () at test.js:95 的位置 0 这是什么意思?
  • 当数据类型为json 时请不要使用json parse,因为你已经获得了json 值@Santiago Center
  • 在 some.php 上打印一个 json_encode($array),如何在 test.js 上将其作为数组检索?
猜你喜欢
  • 2012-02-21
  • 1970-01-01
  • 1970-01-01
  • 2021-04-16
  • 1970-01-01
  • 1970-01-01
  • 2013-05-18
相关资源
最近更新 更多