gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:19:50 24 4
gpt4 key购买 nike

编辑:我尝试按照说明进行操作,显然每次执行查询时都会添加一个新数组,但是,当我生成 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com