【问题标题】:JavaScript cannot store data to array from Ajax - value undefined [duplicate]JavaScript 无法将数据从 Ajax 存储到数组 - 值未定义 [重复]
【发布时间】:2019-02-11 07:07:15
【问题描述】:

我想使用 AJAX 从数据库中检索(连续)数据并将其传递给 JavaScript 中的变量。但是,我不能将它们存储在数组中。数组中的值始终未定义。以下是代码:

我的 JavaScript 文件:

var counter = 0;
$(document).ready(function(){
  var pressure = [];
  var waterflow = [];
  var xhr;
  function execAjax(){
    if(xhr && xhr.readyState != 4){
      xhr.abort();
    }
    xhr = $.ajax({
      url: "controller/getrate.php",
      type: "GET",
      data: {current_location},
      success: (response) => {
        var data = JSON.parse(response);
        pressure[counter] = data.pressure[counter];
        waterflow[counter] = data.waterflow[counter];
        counter++;
      }
    });
  }
  setInterval(function(){
    execAjax();
  }, 5000);

  var data = {
    datasets:[{
    data: [pressure[0],pressure[1]]
    },
    data: [waterflow[0], waterflow[1]]
   ]
  }

  var dataSetA = oldData["datasets"][0]["data"];
  var dataSetB = oldData["datasets"][1]["data"];
  console.log(dataSetA);
  console.log(dataSetB);
});

我的 PHP 文件 (getrate.php):

<?php 
 include 'db.php';

 $data = array(
  "loc_id" => array(),
  "pressure" => array(),
  "waterflow" => array(),
 );

 $getData = "SELECT * FROM tbl_rates LIMIT 10";
 $execGetData = mysqli_query($db, $getData);

 while($row = mysqli_fetch_array($execGetData)){
  array_push($data['loc_id'], $row['locationID']);
  array_push($data['pressure'], $row['pressure']);
  array_push($data['waterflow'], $row['waterflow']);
 }

 echo json_encode($data, JSON_PRETTY_PRINT);
?>

输出:

[undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined]

【问题讨论】:

  • 访问如 pressure.counter = data.pressure.counter;
  • 您会在这里找到答案:stackoverflow.com/questions/33285868/…,如果这不起作用,您还可以对子数组进行 json_encode:$data['loc_id'] = json_encode($data['loc_id'] ); $data['pressure'] = json_encode($data['pressure']); $data['waterflow'] = json_encode($data['waterflow']);

标签: javascript php jquery arrays ajax


【解决方案1】:

我认为你在成功函数中做错了。

success: (response) => {
    var data = JSON.parse(response);
    if(data.pressure.length>0){
         for(car i in data.pressure){
             pressure.push(data.pressure[i]);
         }
    }
    if(data.waterflow.length>0){
         for(car i in data.waterflow){
             pressure.push(data.waterflow[i]);
         }
    }
}

在此之后,您可以制作自定义数据集,例如

var data = {
    datasets:[
        {
             data: pressure
        },
        {
             data: waterflow
        }
   ]
};
var dataSetA = oldData.datasets[0].data;
var dataSetB = oldData.datasets[1].data;

console.log(dataSetA); console.log(dataSetB);

【讨论】:

    【解决方案2】:
    1. 我想知道 JSON.parse(response) 是否是必要的,因为您已经将它作为 JSON 对象获取,因为您的 php 中的 json_encode 将为您提供 JSON 值。它可能会破坏您的代码 JSON.parse 仅适用于字符串变量。

    2. 恐怕你指的是oldData而不是变量data

    【讨论】:

      猜你喜欢
      • 2019-05-04
      • 2019-07-23
      • 2019-10-18
      • 1970-01-01
      • 1970-01-01
      • 2013-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多