【问题标题】:JSON to HTML Table with JS No final outputJSON to HTML Table with JS 没有最终输出
【发布时间】:2015-04-17 17:20:10
【问题描述】:

我正在尝试使用从 JSON 文件获取信息的 JS 添加到 html 表中。 我不知道为什么这不会在表格上显示任何数据。

JSON 示例

[{"User_Name":"John Doe","score":"10","team":"1"},
 {"User_Name":"Jane Smith","score":"15","team":"2"},
 {"User_Name":"Chuck Berry","score":"12","team":"2"}];

我的 JS 不工作 :(

<table class="table">
<thead>
    <tr>
        <th data-field="date">Date</th>
        <th data-field="message">Message</th>
        <th data-field="votes">Votes</th>
    </tr>
    <tr>
 <script type="text/javascript">
 window.onload = function(){
 $(document).ready(function () {
    $.getJSON("/crestdale/new/db.json", function(raw){
        console.log(raw);
    var json = raw;
    var tr;
    console.log(json);
    for (var i = 0; i < json.length; i++) {
        tr = $('<tr/>');
        tr.append("<td>" + json[i].date + "</td>");
        tr.append("<td>" + json[i].message + "</td>");
        tr.append("<td>" + json[i].votes + "</td>");
        $('table').append(tr);
    }
 });
    });
 };
 </script>
     </tr>
 </thead>
 </table>

新问题!!!

我有一个写入 json 文件的 php 文件,当我尝试使用此脚本添加到 json 文件时,它会使 json 文件不显示。

PHP

<?php 
date_default_timezone_set('America/new_york');
$message = $_POST['message'];
$date = date("F j, Y, g:i a"); 

$fp = fopen('db.json', 'r+');
// Loading existing data:
$json = file_get_contents("db.json");
$data = json_decode($json, true);

// Adding new data:
$data[3] = array('date' => $date, 'message' => $message, 'votes' => $votes);

 // Writing modified data:
 file_put_contents('db.json', json_encode($data, JSON_FORCE_OBJECT));


fclose($fp);



?>

PHP 之后的 JSON

{"0":{"User_Name":"John Doe","score":"10","team":"1"},"1":{"User_Name":"Jane Smith","score":"15","team":"2"},"2":{"User_Name":"Chuck Berry","score":"12","team":"2"},"3":{"date":"February 16, 2015, 11:06 pm","message":null,"votes":null}}

【问题讨论】:

  • 你遇到了什么错误?
  • 从来没有错误......@ChrisPietschmann
  • 为什么要添加 .date.message.votes 而您的 JSON 样本有 User_Namescoreteam?另外,题外话,但你让一些人像你一样发疯:1)把$(document).ready放在window.onload里面; 2)把&lt;script&gt;直接放在&lt;tr&gt;里面。
  • 如果您正在获取示例中显示的 JSON,那么它的属性与您尝试在 javascript 中读取的属性不同。
  • 首先,window.onload 是多余的。其次,你在for 循环中做了很多你不应该做的事情。不要在任何地方附加任何东西,直到在 for 之外。只需将其全部推入一个临时数组,然后加入一个字符串,然后一次全部追加。你也不需要它在你的表格 HTML 中,因为你正在做它 onDOMReady (aka $(document).ready()) 也没有理由甚至有 json 因为你没有对 raw 做任何不同的事情.

标签: javascript html json html-table


【解决方案1】:

db.json(请注意末尾没有分号)在您的帖子中,您在 json 文件的末尾指定了一个分号。

[{"User_Name":"John Doe","score":"10","team":"1"},{"User_Name":"Jane Smith","score":"15","team":"2"},{"User_Name":"Chuck Berry","score":"12","team":"2"}]

如果您直接在 javascript 上使用它,它可以使用分号正常工作。

var json = [{"User_Name":"John Doe","score":"10","team":"1"},{"User_Name":"Jane Smith","score":"15","team":"2"},{"User_Name":"Chuck Berry","score":"12","team":"2"}];

在 json 文件中,分号是非法的。但在 javascript 中,分号是代码行的有效结尾。当我们使用 $.getJSON() 时,它将获取 json 文件内容并对其进行解析。由于分号是非法字符;解析将失败。

你的 javascript 没问题。但问题是在 Json 上找不到日期、消息、投票。我已经检查过了,这是有效的

$(document).ready(function () {
            $.getJSON("db.json", function(raw){
            var json = raw;
            var tr;
            console.log(json);
            for (var i = 0; i < json.length; i++) {
                tr = $('<tr/>');
                tr.append("<td>" + json[i].User_Name + "</td>");
                tr.append("<td>" + json[i].score + "</td>");
                tr.append("<td>" + json[i].team + "</td>");
                $('table').append(tr);
            }
         });
            });

新问题的解决方案

您确定 $message 和 $votes 已正确初始化。

    <?php 
         $date = date("F j, Y, g:i a"); 
         $message='new message';
         $votes=10;
         $contents = file_get_contents('db.json');
         $json  = json_decode($contents,true);
         $ar= array('date' => $date, 'message' => $message, 'votes' => $votes);
         array_push($json,$ar); 
         $newJson = json_encode($json);
         file_put_contents("db.json",$newJson);
    ?>

【讨论】:

  • @bnussman 解析将失败,因为它是 Json 的非法字符。
  • 如果您有时间,还有一个问题.... 有没有一种方法可以在我们的 php 数组的输出中添加括号? @Tintu C Raju 这个 [{"3":{"date":"February 16, 2015, 11:42 pm","message":null,"votes":"Coming Soon"}}] 不是这个 {"3":{"date":"February 16, 2015, 11:42 pm","message":null,"votes":"Coming Soon"}}
  • @bnussman file_put_contents("j.json","[".json_encode($json)."]");
  • 完美!谢谢! @Tintu C Raju
  • 哦,不,另一个问题...在我的桌子上,我的价值观显示为“未定义”...@Tintu C Raju
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-15
  • 2015-06-05
  • 1970-01-01
  • 2016-09-02
  • 2016-09-25
  • 2017-04-26
相关资源
最近更新 更多