Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 显示JSON数据的最佳方式_Javascript_Php_Jquery_Json_Dynamic - Fatal编程技术网

Javascript 显示JSON数据的最佳方式

Javascript 显示JSON数据的最佳方式,javascript,php,jquery,json,dynamic,Javascript,Php,Jquery,Json,Dynamic,我有正在提取的JSON数据: { "apiVersion": "0.1", "data": { "roomCount": 12, "rooms": [ { "roomNumber": "204", "occupied": false, "permissions": { "roomCharges": true, "adultContent": true }

我有正在提取的JSON数据:

{
  "apiVersion": "0.1",
  "data": {
    "roomCount": 12,
    "rooms": [
      {
        "roomNumber": "204",
        "occupied": false,
        "permissions": {
          "roomCharges": true,
          "adultContent": true
        }
      },
      {
        "roomNumber": "205",
        "occupied": true,
        "permissions": {
          "roomCharges": false,
          "adultContent": false
        }
      },
      {
        "roomNumber": "206",
        "occupied": true,
        "permissions": {
          "roomCharges": false,
          "adultContent": false
        }
      },
      {
        "roomNumber": "207",
        "occupied": true,
        "permissions": {
          "roomCharges": false,
          "adultContent": false
        }
      },
      {
        "roomNumber": "208",
        "occupied": true,
        "permissions": {
          "roomCharges": false,
          "adultContent": false
        }
      },
      {
        "roomNumber": "209",
        "occupied": true,
        "permissions": {
          "roomCharges": false,
          "adultContent": false
        }
我可以很好地格式化它。使用
JSON\u Decode
,然后在my
中显示
$output
,如下所示:

<table>
    <?php foreach($output['data']['rooms'] as $info): ?>
        <tr>
            <td><?php echo $info['roomNumber'] ?></td>
            <td><?php echo ($info['occupied'] == 1) ? 'OCCUPIED' : 'VACANT'; ?></td>
            <td><?php echo ($info['permissions']['roomCharges'] == 1) ? 'ENABLED' : 'DISABLED'; ?></td>
            <td><?php echo ($info['permissions']['adultContent'] == 1) ? 'ENABLED' : 'DISABLED'; ?></td> 
            <td><?php echo '<a class="clickhere" href="display_room_report.php?id=' . $info['roomNumber'] .'">Click Here</a>'?></td>
        </tr>
    <?php endforeach; ?>
</table>
在我的表格显示中:

        <tr>
            <td><?php echo $roomNumber ?></td>
            <td><?php echo $occupied ?></td>
            <td><?php echo $roomCharges ?></td>
            <td><?php echo $adultContent ?></td> 
            <td><?php echo $roomReport ?></td>
        </tr>
我为每个行项目获得相同的键和值。例如:

204 VACANT  ENABLED ENABLED Click Here
204 VACANT  ENABLED ENABLED Click Here
204 VACANT  ENABLED ENABLED Click Here
204 VACANT  ENABLED ENABLED Click Here
204 VACANT  ENABLED ENABLED Click Here
当我使用的原始
正确返回数据时,如下所示:

<tr>
  <td><?php echo $roomNumber ?></td>
  <td><?php echo $occupied ?></td>
  <td><?php echo $roomCharges ?></td>
  <td><?php echo $adultContent ?></td> 
  <td><?php echo $roomReport ?></td>
 </tr>
table>
        <?php foreach($output['data']['rooms'] as $info): ?>
            <tr>
                <td><?php echo $info['roomNumber'] ?></td>
                <td><?php echo ($info['occupied'] == 1) ? 'OCCUPIED' : 'VACANT'; ?></td>
                <td><?php echo ($info['permissions']['roomCharges'] == 1) ? 'ENABLED' : 'DISABLED'; ?></td>
                <td><?php echo ($info['permissions']['adultContent'] == 1) ? 'ENABLED' : 'DISABLED'; ?></td> 
                <td><?php echo '<a class="clickhere" href="display_room_report.php?id=' . $info['roomNumber'] .'">Click Here</a>'?></td>
            </tr>
        <?php endforeach; ?>
    </table>

你知道我怎样才能让它更有活力吗?谢谢你检查我的问题。如果你还需要什么帮助,请告诉我。我试图解释清楚,如果您需要进一步的信息,请告诉我。

虽然代码中没有显示,但您似乎在第一个循环之外第二次循环项目,从而设置变量,重复初始设置值,而不实际“更新”与该行中的值相对应的变量

一个包含变量声明和表输出的简单循环应该可以实现以下功能:

<?php 
    foreach($output['data']['rooms'] as $info){
        $roomNumber = $info['roomNumber'];
        $occupied = ($info['occupied'] == 1) ? 'OCCUPIED' : 'VACANT'; 
        $roomCharges = ($info['permissions']['roomCharges'] == 1) ? 'ENABLED' : 'DISABLED'; 
        $adultContent = ($info['permissions']['adultContent'] == 1) ? 'ENABLED' : 'DISABLED'; 
        $roomReport = '<a class="clickhere" href="display_room_report.php?id=' . $info['roomNumber'] .'">Click Here</a>';

        ?>

        <tr>
           <td><?php echo $roomNumber ?></td>
           <td><?php echo $occupied ?></td>
           <td><?php echo $roomCharges ?></td>
           <td><?php echo $adultContent ?></td> 
           <td><?php echo $roomReport ?></td>
        </tr>
        <?php
    }
?>

据我所知,问题是您希望在多个位置重用变量,但如果JSON发生更改,您只需要在一个中心位置对其进行编辑

要实现这一点,您可以使用映射将一个位置的变量映射到您选择的局部变量。在这里的第一段代码的第五行,依此类推,您可以更改并为本地数组选择任何想要的名称。如果JSON中的变量发生了变化,只需更改该变量,您的本地映射仍然是相同的。现在只需更改函数get_data_in_my_format()中的代码

创建一个data_parser.php或类似的东西

<?php
    function get_data_in_my_format(){
        $input = json_decode('your data here', true);
        $output = array();
        foreach($input['data']['rooms'] as $info){
            $temp['roomNumber'] = $info['roomNumber'];
            $temp['occupied'] = ($info['occupied'] == 1) ? 'OCCUPIED' : 'VACANT'; 
            $temp['roomCharges'] = ($info['permissions']['roomCharges'] == 1) ? 'ENABLED' : 'DISABLED'; 
            $temp['adultContent'] = ($info['permissions']['adultContent'] == 1) ? 'ENABLED' : 'DISABLED'; 
            $temp['roomReport'] = '<a class="clickhere" href="display_room_report.php?id=' . $info['roomNumber'] .'">Click Here</a>';
            $output[] = $temp;
        }
        return $output;
    }

    //Only insert following line if you want to run the function no matter what
    $data_in_my_format = get_data_in_my_format();


您的问题是变量(
$roomNumber,$accumposed
等)在初始foreach循环中被覆盖,因此它们最终保存了上一次迭代的值。解决方案可能很简单,但您需要详细说明如何在多个页面中访问这些数据。答案可能很简单,就像phps
include
statement一样。我以前试过这样做,结果被投了赞成票。如果你花30秒去读它,它真的会更容易理解。@Steve啊,我明白了。。。是的,你说得对。我想创建一个“data.php”页面,并将其包含在我需要的每个脚本中,比如include'data.php';一个简单的解决方案是只使用原始代码,将其放在名为
datatable.php的文件中,并直接包含它。或者表格/html标记需要在不同的页面之间进行更改吗?@Steve我想我最终可能会这样做。标记将更改,但我可以解决它。谢谢。如果['roomNUMBER']更改为不同的名称,比如['roomID'],那么我仍然需要在两个位置编辑它。如果JSON中的roomNUMBER更改为roomID,则只需在映射中更改它,因此第5行变为:$temp['roomNUMBER']=$info['roomID'];那就是如果我正确理解你的问题,我知道你现在在做什么。是的,这可能真的有用。我会试试看,然后再打给你。谢谢@fiLLipnet
<?php 
    foreach($output['data']['rooms'] as $info){
        $roomNumber = $info['roomNumber'];
        $occupied = ($info['occupied'] == 1) ? 'OCCUPIED' : 'VACANT'; 
        $roomCharges = ($info['permissions']['roomCharges'] == 1) ? 'ENABLED' : 'DISABLED'; 
        $adultContent = ($info['permissions']['adultContent'] == 1) ? 'ENABLED' : 'DISABLED'; 
        $roomReport = '<a class="clickhere" href="display_room_report.php?id=' . $info['roomNumber'] .'">Click Here</a>';

        ?>

        <tr>
           <td><?php echo $roomNumber ?></td>
           <td><?php echo $occupied ?></td>
           <td><?php echo $roomCharges ?></td>
           <td><?php echo $adultContent ?></td> 
           <td><?php echo $roomReport ?></td>
        </tr>
        <?php
    }
?>
<?php
    function get_data_in_my_format(){
        $input = json_decode('your data here', true);
        $output = array();
        foreach($input['data']['rooms'] as $info){
            $temp['roomNumber'] = $info['roomNumber'];
            $temp['occupied'] = ($info['occupied'] == 1) ? 'OCCUPIED' : 'VACANT'; 
            $temp['roomCharges'] = ($info['permissions']['roomCharges'] == 1) ? 'ENABLED' : 'DISABLED'; 
            $temp['adultContent'] = ($info['permissions']['adultContent'] == 1) ? 'ENABLED' : 'DISABLED'; 
            $temp['roomReport'] = '<a class="clickhere" href="display_room_report.php?id=' . $info['roomNumber'] .'">Click Here</a>';
            $output[] = $temp;
        }
        return $output;
    }

    //Only insert following line if you want to run the function no matter what
    $data_in_my_format = get_data_in_my_format();
<?php
    include('data_parser.php');
    //If you did not initiate $data_in_my_format in data_parser.php, do it here
    //$data_in_my_format = get_data_in_my_format();
    foreach($data_in_my_format as $room){
        ?>
            <tr>
                <td><?php echo $room['roomNumber'] ?></td>
                <td><?php echo $room['occupied'] ?></td>
                <td><?php echo $room['roomCharges'] ?></td>
                <td><?php echo $room['adultContent'] ?></td> 
                <td><?php echo $room['roomReport'] ?></td>
            </tr>
        <?php
    }