javascript - 添加几个 json 数组并根据菜单元素点击过滤它们

标签 javascript php jquery json

编辑:我尝试按照说明进行操作,显然每次执行查询时都会添加一个新数组,但是,当我生成 JSON 文件时,第二个数组包含第一个数组的值和第二个数组的值.这有什么问题吗?

这是我的问题:我必须解决两个问题:

1) 我必须使用 PHP 创建一个包含一系列连续数组的 JSON 文件,如以下示例所示:

{
    "data": {
        "cliente": [
            {
                "id": "Sentra",
                "nome": 4,
                "cognome": "Sentra",
                "indirizzo": 4,
                "email": "Sentra",
                "tipo_contatto": 4,
                "telefono_1": "Sentra",
                "telefono_2": 4,
                "telefono_3": "Sentra"
            }
        ],
        "accettazione": [
            {
                "id": "Sentra",
                "nome": 4,
                "cognome": "Sentra",
                "indirizzo": 4,
                "email": "Sentra",
                "tipo_contatto": 4,
                "telefono_1": "Sentra",
                "telefono_2": 4,
                "telefono_3": "Sentra"
            },                
            {
                "id": "Taurus",
                "data": 4,
                "id_operatore": "Taurus",
                "dispositivo": 4,
                "note": "Taurus",
                "password": 4,
                "tipo_avviso": "Taurus",
                "id_cliente": 4,
                "difetto_dichiarato": "Taurus",
                "codice": 4
            }
        ]
    }
}

这里我有两个数组,但我需要加载它们,无论如何,在我的 PHP 页面中,这是我所拥有的:

<?php

session_start();

include_once('UniversalConnect.php');

class Login
{

    private $hookUp;
    private $sql;
    private $sql2;
    private $sql3;
    private $sql4;

    public function __construct()
    {
        $this->hookUp = UniversalConnect::doConnect();

        $this->sql = "SELECT * FROM cliente";
        $this->sql2 = "SELECT * FROM accettazione";
        $this->sql3 = "SELECT * FROM riparazione";
        $this->sql4 = "SELECT * FROM operatore";

        // Tabella cliente

        $response = array();
        $data = array();

        if ($result = $this->hookUp->query($this->sql)) {
            while ($row = mysqli_fetch_array($result, MYSQLI_BOTH)) {
                echo "<tr>";
                echo "<td>" . $row['id'] . "</td>";
                echo "<td>" . $row['nome'] . "</td>";
                echo "<td>" . $row['cognome'] . "</td>";
                echo "<td>" . $row['indirizzo'] . "</td>";
                echo "<td>" . $row['email'] . "</td>";
                echo "<td>" . $row['tipo_contatto'] . "</td>";
                echo "<td>" . $row['telefono_1'] . "</td>";
                echo "<td>" . $row['telefono_2'] . "</td>";
                echo "<td>" . $row['telefono_3'] . "</td>";
                echo "</tr>";

                $data[] = array("id" => $row['id'], "nome" => $row['nome'], "cognome" => $row['cognome'], "indirizzo" => $row['indirizzo'], "email" => $row['email'], "tipo_contatto" => $row['tipo_contatto'],
                    "telefono_1" => $row['telefono_1'], "telefono_2" => $row['telefono_2'], "telefono_3" => $row['telefono_3']);

                $response['cliente'] = $data;

                $fp = fopen("cliente.json", "w");
                fwrite($fp,json_encode($response));
                fclose($fp);
            }
        }

        // Tabella accettazione

        if ($rs = $this->hookUp->query($this->sql2)) {
            while ($rw = mysqli_fetch_array($rs, MYSQLI_BOTH)) {
                echo "<tr>";
                echo "<td>" . $rw['id'] . "</td>";
                echo "<td>" . $rw['data'] . "</td>";
                echo "<td>" . $rw['id_operatore'] . "</td>";
                echo "<td>" . $rw['dispositivo'] . "</td>";
                echo "<td>" . $rw['note'] . "</td>";
                echo "<td>" . $rw['password'] . "</td>";
                echo "<td>" . $rw['tipo_avviso'] . "</td>";
                echo "<td>" . $rw['id_cliente'] . "</td>";
                echo "<td>" . $rw['difetto_dichiarato'] . "</td>";
                echo "<td>" . $rw['codice'] . "</td>";
                echo "</tr>";

                $data[] = array("id" => $rw['id'], "data" => $rw['data'], "id_operatore" => $rw['id_operatore'], "dispositivo" => $rw['dispositivo'], "note" => $rw['note'], "password" => $rw['password'],
                    "tipo_avviso" => $rw['tipo_avviso'], "id_cliente" => $rw['id_cliente'], "difetto_dichiarato" => $rw['difetto_dichiarato'], "codice" => $rw['codice']);

                $response['accettazione'] = $data;

                $file = file_get_contents("cliente.json");
                $data = json_decode($file);
                unset($file);
                file_put_contents("cliente.json", json_encode($data));
                unset($data);

                $fp = fopen("cliente.json", "w");
                fwrite($fp,json_encode($response));
                fclose($fp);
            }
        }
    }
}

$worker = new Login();

?>

该文件执行四个查询。在第一个中,我创建了 json 文件,第一个查询创建了第一个数组,然后用第二个查询创建了第二个,第二个“accettazione”必须成为第二个数组,在第一个数组上用逗号分隔,等等……

不幸的是,当执行第二个查询时,第二个数组变成了第一个数组,它并没有成为第一个之后的第二个。我知道如何将新对象推送到现有数组,但情况并非如此。

2) 第二个问题是关于如何在我的页面中生成这些数据:

在下面的代码中,当我点击“a”标签时,“链接”代码段(我没有在这里附加它,但它是一个 html div),显示代码(它是一个空表),它必须承载 JSON 数据。从示例中可以看出,tmp_div 是一种指示内容(div 0、div 1、div 2、div3)的数组。

我的想法是,当我点击 tmp_div 0 时,必须显示 json.data.cliente,其他的也一样,但我想以动态方式进行,而不是每次都指定不同的情况。我必须如何编辑代码才能达到目标?

<!--Funzione di selezione della voce del menu e dell'apparizione dei relativi dati-->

<script type="text/javascript">

    $('.sidebar-menu a').click(function (e) {
        hideContentDivs();
        var tmp_div = $(this).parent().index();
        $(".main-sections div").eq(tmp_div).show();

        $.getJSON("lista.json", function(json){

            if (tmp_div == 0) {
                var data = json.data.cliente;

                for (var i = 0; i < data.length; i++) {
                    var object = data[i];
                    for (property in object) {
                        var value = object[property];
                        console.log(property + "=" + value);
                    }
                }
            } else if (tmp_div == 1) {

                var data = json.data.accettazione;

                for (var i = 0; i < data.length; i++) {
                    var object = data[i];
                    for (property in object) {
                        var value = object[property];
                        console.log(property + "=" + value);
                    }
                }
            } else if (tmp_div == 2) {
                var data = json.data.riparazione;

                for (var i = 0; i < data.length; i++) {
                    var object = data[i];
                    for (property in object) {
                        var value = object[property];
                        console.log(property + "=" + value);
                    }
                }
            } else if (tmp_div == 3) {
                var data = json.data.operatore;

                for (var i = 0; i < data.length; i++) {
                    var object = data[i];
                    for (property in object) {
                        var value = object[property];
                        console.log(property + "=" + value);
                    }
                }
            }
        });


    });

    function hideContentDivs() {
        $(".main-sections div").each(function () {
            $(this).hide();
        });
    }

    hideContentDivs();

</script>

最佳答案

回答您的第一个问题:

Unfortunately, when the second query is executed, the second array becomes the first array, it doesn't become the second after the first one. I know how to push new objects to an existing array, but that's not the situation.

现在您正在循环中调用 $data = array()。您将在循环的每次迭代中覆盖现有数组。因此,$data[] = ... 将始终推送到元素 0,因为它推送到一个空数组。

此外,您正在这样做:$response['cliente'] = $data; 这意味着您将始终使用任何 $ 重写 $response数据是。这不是将新对象插入现有数组;你总是在覆盖你的数组。

回答你的第二个问题:

这最终更像是一个设计问题。你有很多可能的答案。您现在可以做的一件非常快速的事情可能是创建一个函数,但这只是向前迈出的一小步。您可能在Code Review中有更好的建议相反。

关于javascript - 添加几个 json 数组并根据菜单元素点击过滤它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31458523/

相关文章:

javascript - 窗口计算中的视差背景位置

php - 两个特殊字符之间的正则表达式

Javascript - 在上一个函数结束后启动函数

php - 使用 where 条件连接查询 codeigniter 返回所有行

javascript - 代码效率专家——操作列表——字符串比较——将元素追加到另一个div

java - 大数据从 Javascript 到 servlet

javascript - `element.next().insertBefore(element)` 是做什么的?

javascript - 如何将unix时间戳和 "9:00 am"组合成一个新的时间戳?

php - 如何删除旧的缓存图像

php - 回显内容有时需要很长时间