尝试通过 json 文件检索唯一数据

Trying to retrieve unique data through a json file

我正在寻求帮助我正在尝试从我用于学生项目的 api 中获取 json 文件的一些数据(我在 API东西)。

我正处于项目的开始阶段,他们要求我获取主页上的所有 json 文件数据以及与 :

相关的所有信息

Those are the data that I extract for the API

它工作正常,当用户点击其中一项时,它会显示相同的信息,但只显示被点击的信息,这就是我卡住的地方。

当我点击一个项目时,他们每个人都有一个与 link 相关的 ID,显示他们自己的 ID :

The small code use through a loop to get all items id

所以我为产品页面创建了另一个 js 文件,我只需要用 Javascript Vanilla 实现它们,这就是我试过的方法:

// API REQUEST
const connection = fetch ('http://localhost:3000/api/products')

/* *********CONNECION*********** */
connection.then((response) => {
    
    if(response.ok){
        return response.json();
    }

    else{
        console.log('Connection failed');
    }
    
})

/* ********END DE CONNEXION*********** */


.then((jsonArray) => {

    function JsDemo(myData){
      
   // TARGETING ON HTML SELECTORS
        const imgOfTheActualProduct = document.querySelector(".item__img > img");
        const titleOfTheActualProduct = document.querySelector(".item__content__titlePrice > #title");
        const priceOfTheActualProduct = document.querySelector(" .item__content__titlePrice #price");
        const colorOfTheActualProduct = document.querySelector("#colors");
        const descriptionOfTheActualProduct = document.querySelector('.item__content__description #description');
        // Loop to get json elements
        for(let i = 0 ; i < myData.length; i++){
            
            imgOfTheActualProduct.src=`${myData[i].imageUrl}`;
            titleOfTheActualProduct.innerHTML=`${myData[i].name}`;
            priceOfTheActualProduct.innerHTML=`${myData[i].price}`;
            descriptionOfTheActualProduct.innerHTML=`${myData[i].description}`
            // colorOfTheActualProduct.innerHTML=`${myData[i].colors}`;
        
            
    }
    
  
    }

    JsDemo(jsonArray);
})

上面的代码有效(只有 api 不在这里 :) )但它只显示 json 文件的最后数据,当我选择所有时我检索相同的东西主页上的项目...

只是为了了解我在 JSON 部分谈论的内容:

[
    {
        "colors": ["Blue", "White", "Black"],
        "_id": "107fb5b75607497b96722bda5b504926",
        "name": "Kanap Sinopé",
        "price": 1849,
        "imageUrl": "http://localhost:3000/images/kanap01.jpeg",
        "description": "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
        "altTxt": "Photo d'un canapé bleu, deux places"
    },
    {
        "colors": ["Black/Yellow", "Black/Red"],
        "_id": "415b7cacb65d43b2b5c1ff70f3393ad1",
        "name": "Kanap Cyllène",
        "price": 4499,
        "imageUrl": "http://localhost:3000/images/kanap02.jpeg",
        "description": "Morbi nec erat aliquam, sagittis urna non, laoreet justo. Etiam sit amet interdum diam, at accumsan lectus.",
        "altTxt": "Photo d'un canapé jaune et noir, quattre places"
    },
    {
        "colors": ["Green", "Red", "Orange"],
        "_id": "055743915a544fde83cfdfc904935ee7",
        "name": "Kanap Calycé",
        "price": 3199,
        "imageUrl": "http://localhost:3000/images/kanap03.jpeg",
        "description": "Pellentesque fermentum arcu venenatis ex sagittis accumsan. Vivamus lacinia fermentum tortor.Mauris imperdiet tellus ante.",
        "altTxt": "Photo d'un canapé d'angle, vert, trois places"
    },
    {
        "colors": ["Pink", "White"],
        "_id": "a557292fe5814ea2b15c6ef4bd73ed83",
        "name": "Kanap Autonoé",
        "price": 1499,
        "imageUrl": "http://localhost:3000/images/kanap04.jpeg",
        "description": "Donec mattis nisl tortor, nec blandit sapien fermentum at. Proin hendrerit efficitur fringilla. Lorem ipsum dolor sit amet.",
        "altTxt": "Photo d'un canapé rose, une à deux place"
    },
    {
        "colors": ["Grey", "Purple", "Blue"],
        "_id": "8906dfda133f4c20a9d0e34f18adcf06",
        "name": "Kanap Eurydomé",
        "price": 2249,
        "imageUrl": "http://localhost:3000/images/kanap05.jpeg",
        "description": "Ut laoreet vulputate neque in commodo. Suspendisse maximus quis erat in sagittis. Donec hendrerit purus at congue aliquam.",
        "altTxt": "Photo d'un canapé gris, trois places"
    },
    {
        "colors": ["Grey", "Navy"],
        "_id": "77711f0e466b4ddf953f677d30b0efc9",
        "name": "Kanap Hélicé",
        "price": 999,
        "imageUrl": "http://localhost:3000/images/kanap06.jpeg",
        "description": "Curabitur vel augue sit amet arcu aliquet interdum. Integer vel quam mi. Morbi nec vehicula mi, sit amet vestibulum.",
        "altTxt": "Photo d'un canapé gris, deux places"
    },
    {
        "colors": ["Red", "Silver"],
        "_id": "034707184e8e4eefb46400b5a3774b5f",
        "name": "Kanap Thyoné",
        "price": 1999,
        "imageUrl": "http://localhost:3000/images/kanap07.jpeg",
        "description": "EMauris imperdiet tellus ante, sit amet pretium turpis molestie eu. Vestibulum et egestas eros. Vestibulum non lacus orci.",
        "altTxt": "Photo d'un canapé rouge, deux places"
    },
    {
        "colors": ["Pink", "Brown", "Yellow", "White"],
        "_id": "a6ec5b49bd164d7fbe10f37b6363f9fb",
        "name": "Kanap orthosie",
        "price": 3999,
        "imageUrl": "http://localhost:3000/images/kanap08.jpeg",
        "description": "Mauris molestie laoreet finibus. Aenean scelerisque convallis lacus at dapibus. Morbi imperdiet enim metus rhoncus.",
        "altTxt": "Photo d'un canapé rose, trois places"
    }
]

老实说,我不知道该怎么办我不是在寻找解决方案,只是一个提示。

我在 mdn 上查找了 URL 搜索参数,但我真的不明白它在这里可能会有什么用,因为我已经知道每个 ID 都是正确的 linked(或者也许我错了吗?!)

抱歉有点长。

感谢阅读!

所以我在循环中移动了查询选择器

   for(let i = 0; i < myData.length; i++){
             
             const imgOfTheActualProduct = document.querySelector(".item__img > img");
             const titleOfTheActualProduct = document.querySelector(".item__content__titlePrice > #title");
             const priceOfTheActualProduct = document.querySelector(" .item__content__titlePrice #price");
             // const colorOfTheActualProduct = document.querySelector("#colors");
             const descriptionOfTheActualProduct = document.querySelector('.item__content__description #description');

             imgOfTheActualProduct.src=`${myData[i].imageUrl}`;
             titleOfTheActualProduct.innerHTML=`${myData[i].name}`;
             priceOfTheActualProduct.innerHTML=`${myData[i].price}`;
             descriptionOfTheActualProduct.innerHTML=`${myData[i].description}`
             // colorOfTheActualProduct.innerHTML=`${myData[i].colors}`;
     }
      <div class="item__img">
               <img src="../images/logo.png" alt="Photographie d'un canapé"> 
            </div>
            <div class="item__content">

              <div class="item__content__titlePrice">
                <h1 id="title"><!-- Nom du produit --></h1>
                <p>Prix : <span id="price"><!-- 42 --></span>€</p>
              </div>

              <div class="item__content__description">
                <p class="item__content__description__title">Description :</p>
                <p id="description"><!-- Dis enim malesuada risus sapien gravida nulla nisl arcu. --></p>
              </div>

编辑:

所以我已经完成了您所写的操作,这次恰恰相反,它是您单击每个 link 和控制台 return 时显示的第一张图片,我认为:

Console Error

我试着看看我是否写错了,当我删除控制台中显示的变量时,imgOfTheActualProduct 下面的每个变量都显示相同的错误。

如果我可以修改 html 我真的会,但我无权这样做,我所要做的就是只用 Javascript Vanilla 构建项目的其余部分。

我想知道我是否可以用 URLsearchparamaters 做我需要的事情,我会做一些研究

JsDemo 函数的查询选择器逻辑仅在循环外调用一次。然后循环遍历数组并在每次迭代中覆盖所有属性。因此,在循环结束时,数组的最后一个元素将用于填充值。 如果您的目标是填充每张卡片,则可以在循环内移动查询选择器逻辑。为此,您必须使用索引,即 i 变量。

Html 没有标记要保持不变的 card.If 的索引的属性 html,您可以使用 document.querySelectorAll()我喜欢下面的索引。

         const imgOfTheActualProduct = document.querySelectorAll(".item__img > img")[i];
         const titleOfTheActualProduct = document.querySelectorAll(".item__content__titlePrice > #title")[i];
         const priceOfTheActualProduct = document.querySelectorAll(" .item__content__titlePrice #price")[i];
         // const colorOfTheActualProduct = document.querySelectorAll("#colors")[i];
         const descriptionOfTheActualProduct = document.querySelectorAll('.item__content__description #description')[i];