My script, this should be showing the Name of game computers in html but it does not, I have been trying so much andI betit will just be something stupid that is wrong or missing Console says : TypeError: data is undefined
The console does show me retrieving the data works
"use strict";
window.addEventListener("load", Init);
function Init() {
fetch("https://howest-gp-wfa.github.io/st-2021-1-S2-a-wfa-pe03-Jonas-Bundervoet/api/products.json")
.then(function(response) { return response.json(); })
.then(data => console.log(data))
.then(function(data){
tester(data)
})
.catch(err => console.log(err));
window.addEventListener("load", tester);
}
My function to show data on screen (shows nothing)
function tester(data)
{
let div = document.getElementById("test");
for (var i = 0; i < data.length; i++) {
let article = document.createElement("h1");
article.innerHTML = 'Name: ' + data.GameComputers[0].Name;
div.appendChild(article);
};
}
In HTML I just have this in my body
<div id="test"></div>
Advertisement
Answer
console.log returns undefined
.then(data => console.log(data)) .then(function(data){ tester(data)
Your first then returns the return value of console.log which is undefined.
So your second then recieves undefined as its data.
Don’t use multiple then callbacks here.
.then(function(data){
console.log(data)
tester(data)
The JSON doesn’t consist of an array
The JSON you are looking at returns an object.
It doesn’t have a length.
for (var i = 0; i < data.length; i++) {
… is going to fail immediately.
You’ve got data.GameComputers[0] so I’m guessing you want to loop over GameComputers so:
- Check the length of that:
i < data.GameComputers.length - Make use of
iwhen you read it:data.GameComputers[i].Name;