javascript - JSON 请求为所有键/值对返回 'undefined'

标签 javascript php html json

我有一个将 Google 电子表格解析为 JSON 的 PHP 文件:

<?php
header('Content-type: application/json');

// Set your CSV feed
$feed = 'https://docs.google.com/spreadsheets/d/1IwFDZp1dLBR931OnJpEgW9ojrLx063m5_dhkqKGgugc/pub?output=csv';

// Arrays we'll use later
$keys = array();
$newArray = array();

// Function to convert CSV into associative array
function csvToArray($file, $delimiter) { 
  if (($handle = fopen($file, 'r')) !== FALSE) { 
    $i = 0; 
    while (($lineArray = fgetcsv($handle, 4000, $delimiter, '"')) !== FALSE) { 
      for ($j = 0; $j < count($lineArray); $j++) { 
        $arr[$i][$j] = $lineArray[$j]; 
      } 
      $i++; 
    } 
    fclose($handle); 
  } 
  return $arr; 
} 

// Do it
$data = csvToArray($feed, ',');

// Set number of elements (minus 1 because we shift off the first row)
$count = count($data) - 1;

//Use first row for names  
$labels = array_shift($data);  

foreach ($labels as $label) {
  $keys[] = $label;
}

// Add Ids, just in case we want them later
$keys[] = 'id';

for ($i = 0; $i < $count; $i++) {
  $data[$i][] = $i;
}

// Bring it all together
for ($j = 0; $j < $count; $j++) {
  $d = array_combine($keys, $data[$j]);
  $newArray[$j] = $d;
}

// Print it out as JSON
echo json_encode($newArray);

?>

在我的 HTML 中,一些代码应该将该 JSON 呈现为 HTML 表格:

<body>
    <div id="id01"></div>

    <script>
        var xmlhttp = new XMLHttpRequest();
        var url = "votos.json.php";

        xmlhttp.onreadystatechange=function() {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                myFunction(xmlhttp.responseText);
            }
        }
        xmlhttp.open("GET", url, true);
        xmlhttp.send();

        function myFunction(response) {
            var arr = JSON.parse(response);
            var i;
            var out = "<table>";

            for(i = 0; i < arr.length; i++) {
                out += "<tr><td>" +
                arr[i].Name +
                "</td><td>" +
                arr[i].City +
                "</td><td>" +
                arr[i].Country +
                "</td></tr>";
            }
            out += "</table>";
            document.getElementById("id01").innerHTML = out;
        }
    </script>

</body>

访问 index.html 会显示每个单元格中都填充了“未定义”的表格。但是,将 URL 从“votos.json.php”更改为其他网址,例如,从 W3 中提取的网址:[ http://www.w3schools.com/website/customers_mysql.php] ,该表由正确的数据填充并很好地显示。 我已经验证了 PHP 文件的 JSON 输出,它似乎没有任何问题 - 那么可能是什么原因造成的,如何解决?

最佳答案

您从该 CSV 文件中引用了不正确的列名。尝试...

for (i = 0; i < arr.length; i++){
    out += "<tr><td>" +
    arr[i].candidato +
    "</td><td>" +
    arr[i].votos +
    "</td><td>" +
    arr[i].porcentaje +
    "</td></tr>";
}

关于javascript - JSON 请求为所有键/值对返回 'undefined',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31813719/

相关文章:

javascript - 一个 promise 中的两次拒绝

php - 将按钮并排放置在 css 的 while 循环中

php - Css文件修改为服务器中的临时php文件(joomla)

jquery - 了解使用 Bootstrap 和 Font-awesome 所需的文件夹结构和文件

html - 使用 Nokogiri 解析 nessus HTTP 响应?

javascript - 在 javascript 中,访问 'window.Math' 比访问没有 'Math' 的 'window.' 对象慢还是快?

javascript - 将上下文 "this"从一个函数传递到另一个函数中?

html - 移动时的 CSS 过渡

javascript - 获取 AngularJS 指令中的模板元素

php - 检查下一个小时是否存储了任何数据