Fetch JavaScript Hilfe?
Hallo,
bei mir klappt Folgendes nicht:
Wenn ich bei "Registration Form" alle inputs ausfülle, dann kommt ein sogenanntes "Kärtchen" mit deinem Avatar raus. Jedes "Kärtchen" enthält einen button "Log out", und wenn man auf den button drückt, dann sollte das "Kärtchen" nur aus HTML gelöscht werden (aber nicht aus Backend Server- Api) und der "logged" sollte im Backend Server auf false gesetzt werde.
Wie kann man das machen? Ich habe schon davor mit fetch gearbeitet, aber so ein Problem kommt bei mir zum ersten Mal (Bin ja noch komplett ein Noob in JavaScript).
HTML-Code:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Registration | Form</title>
<link rel="stylesheet" href="./CSS/settings.css">
<link rel="stylesheet" href="./CSS/style.css">
<link rel="stylesheet" href="./CSS/javascriptStyles.css">
<script defer src="./JavaScript/script.js"></script>
</head>
<body>
<div class="container">
<div class="container-two">
<div class="registration-form">
<h2 id="heading">● Registration Form ●</h2>
<div class="forms">
<input id="emailInput" type="text" placeholder="example@gmail.com">
<input id="userInput" type="text" placeholder="Username">
<input id="pictureInput" type="text" placeholder="Picture">
<button id="createButton">Create Account</button>
</div>
<p id="signInText">Already have an account? <a href="../PageTwo/index.html" id="aText">Sign in</a></p>
</div>
</div>
</div>
<div id="registerList">
</div>
</body>
</html>
JavaScript-Code:
const registerList = document.getElementById("registerList")
const forms = document.getElementById("forms")
const email = document.getElementById("emailInput")
const user = document.getElementById("userInput")
const picture = document.getElementById("pictureInput")
const createButton = document.getElementById("createButton")
const url = "https://crudcrud.com/api/dac4c32dac5c4861a46ad8aee63df14c/todos"
const dataRender = (posts) => {
if (posts === undefined) {
console.log("Loading...");
}
else{
let dataList = posts.map((post) => {
return `
<div class="register-container">
<div class="inner-container">
<img id="registerPicture" src="${post.picture}" alt="${post.user}">
<h2 id="registerUser">${post.user}</h2>
<h5 id="registerEmail">${post.email}</h5>
<button onclick=logOutButton("${post._id}") id="registerButton">Log out</button>
</div>
</div>
`
})
registerList.innerHTML = dataList.join("")
}
}
//GET METHOD
fetch (url)
.then(response => response.json())
.then (data => dataRender(data))
//POST METHOD
createButton.addEventListener("click", () => {
fetch(url, {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
user: user.value,
email: email.value,
registered: true,
logged: true
})
})
.then(response => response.json())
.then(data => {
const dataArray = []
dataArray.push(data)
dataRender(dataArray)
email.value = ""
user.value = ""
picture.value = ""
console.log(`User ${user.value} registered successful!`)
})
})
//PUT METHOD
const logOutButton = (id) => {
const data = {
user: user.value,
email: email.value,
registered: true,
logged: false
}
fetch(`${url}/${id}`, {
method: "PUT",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => {
})
}
Bitte helft mir! Ich weiss wirklich nicht wie das geht und möchte jetzt auch nicht den ganzen Tag dazu verschwenden! Denn ich habe noch andere Hausaufgaben.. Dankeschön im Voraus!
LG
MrOsmo
1 Antwort
Attributwerte werden von Anführungszeichen umklammert.
<button onclick="logOutButton('${post._id}')" ...
(...) und wenn man auf den button drückt, dann sollte das "Kärtchen" nur aus HTML gelöscht werden (...)
Wie man Elemente löschen kann, hatte ich dir schon in dieser Antwort geschrieben. Die Aktion würde ich im (bei dir noch leeren) fetch-Callback durchführen.
(...) und der "logged" sollte im Backend Server auf false gesetzt werde. (...)
Das tust du schon bzw. wenn die aktuelle Implementation nicht funktioniert, wäre eine genauere Analyse notwendig:
- Welche Daten werden konkret verschickt (nachgestellt an einem konkreten Beispiel)?
- Was ist die Antwort?
Beides kannst du in den Entwicklungstools deines Browsers nachverfolgen. Im Network-Tab (o.ä., je Browser kann der Name etwas variieren) werden alle Requests aufgeführt, die verschickt werden. Du kannst je Request den Payload sowie den Response auslesen.
Dankeschön für deine Antwort! Ich wollte nochmal nachfragen, wo genau du, das mit dem fetch-Callback meinst? Meinst du, dass ich es hier schreiben soll.?
Also da wo Put-methode