JS- Komischer Fehler bei Variable?
Hallo, ich schreibe grad so nen ChatRoom und da ist eine JS-Funktion, die nicht richtig funktioniert. Ich habe schon KI gefragt, aber er konnte keine Lösung finden, also stelle ich die Frage hier.
Die Funktion, um die es geht ist folgende:
async function login() {
const codeInput = document.getElementById('code-input').value;
const response = await fetch('users.json');
const users = await response.json();
let uname = false; // Verwendung von 'let' statt 'var'
for (let i = 0; i < users.length; i++) { // Verwendung von 'let' statt 'var'
if (users[i].usercode === codeInput) {
console.log("UserName:", users[i].username);
uname = users[i].username;
break;
}
}
if (uname) {
document.getElementById('login-container').style.display = 'none';
document.getElementById('chat-container').style.display = 'block';
loadMessages();
window.intervalId = setInterval(loadMessages, 2500);
} else {
alert('Ungültiger Code. Bitte versuche es erneut.');
}
}
Bei console.log kommt der Richtige Username, aber direkt danach, bei uname = users[i].username; kommt einfach nur undefined.
Danke im voraus.
3 Antworten
Ich kenne mich nicht genau aus, aber mit dem „let“ oben wird uname als Bool initialisiert. Versuch mal let uname = ““ (leerer String)
Alles klar, dann kann ich leider auch nicht weiterhelfen. Danke für den Hinweis!
Du schreibst eine asynchrone Funktion und definierst "undefined" als "komischer Fehler"?
Debugger hilft :)
function login() {
var codeInput = "Jones";
var response = '{"users":[' +
'{"userName":"John","userCode":"Doe" },' +
'{"userName":"Anna","userCode":"Smith" },' +
'{"userName":"Peter","userCode":"Jones" }]}';
var oJSON = JSON.parse(response);
for (var i = 0; i < 3; i++) {
if (oJSON.users[i]['userCode'] === codeInput) {
var uname = oJSON.users[i]['userName'];
console.log("Willkommen", uname);
break;
}
}
}
Da ich nicht weiß, wie deine Struktur aussieht, habe ich es für mich abgespeckt.
JWarum nutzt du var?
Der Fehler ist vermutlich dass der Fragesteller in dem scope eine lokale uname variable hat und versucht die außerhalb des scopes zu nutzen, vielleicht hat er eine andere variable die gleich heißt. Klingt für mich zumindest so?
ich sehe nicht was das mit async zu tun haben sollte.
Er versucht nichts außerhalb des Scopes zu nutzen, da das let im Funktionsblock ist und kein anderer Block definiert wurde.
ich sehe nicht was das mit async zu tun haben sollte.
Asynchrone Programmierung ist keine Disziplin für Anfänger - der Fehler, den der Fragesteller produzierte, ist ein Anfängerproblem. Siehe seine Antwort :)
Richtig, aber da Users aus einem json kommt (dass es irgendwelche Seiteneffekte über merkwürdige getter oder proxies gibt ist also ausgeschlossen) und er mit alert debugged kann es meiner Meinung nach nicht sein, dass er die richtige Variable debugged. Außer ich übersehe irgendeine Zuweisung.
Ich habe die Lösung gefunden. War ein dummer Fehler von mir.
Im Chatroom wurde der Benutzername über die "username"-Variable genommen. Da ich in der Funktion nur "uname" hatte, kam da undefined.
Aber trotzdem danke für eure Hilfe!
Hey, das macht (an sich) keinen Unterschied, in JS ist die Typisierung schwach und du kannst einer Variable einen Wert mit anderen Typen problemlos zuweisen.