Kezdőoldal » Számítástechnika » Programozás » Mi lehet a probléma ebben a...

Mi lehet a probléma ebben a HTML kódban?

Figyelt kérdés

Nem igazán értek hozzá, főleg AI-val csinálgatom... A probléma az, hogy a privát chatnél a fogadó félnek nem jelenik meg rögtön az új üzenet az ablakban (három ablak is lehet egyszerre), csak az oldal újratöltése után.

Nem küldöm el a teljes kódot csak a fontosabb részeket:


Szerver oldal:


// Üzenetek kezelése

socket.on('sendMessage', (data) => {

console.log("sendMessage event received:", data);

const { sender, receiver, message, isPrivate } = data;

db.run('INSERT INTO messages (sender, receiver, message) VALUES (?, ?, ?)', [sender, receiver, message], (err) => {

if (err) throw err;

if (isPrivate) {

// Ellenőrizzük, hogy a címzett online van-e és van-e megnyitva a privát ablaka

if (userSockets[receiver] && userSockets[receiver].sockets && userSockets[receiver].currentChatId !== null) {

userSockets[receiver].sockets.forEach(socket => {

socket.emit('newPrivateMessage', { sender, receiver, message, chatId: userSockets[receiver].currentChatId });

});

} else { // Ha a címzett offline, vagy nincs megnyitva az ablak, akkor csak egyszer mentsük el az adatbázisba

console.log('Offline címzett, üzenet elmentve az adatbázisba.');

}

// Küldő is megkapja az üzenetet, ha az ablaka nyitva van

if (userSockets[sender] && userSockets[sender].sockets && userSockets[sender].currentChatId !== null && userSockets[sender].currentChatId !== userSockets[receiver].currentChatId) {

userSockets[sender].sockets.forEach(socket => {

socket.emit('newPrivateMessage', { sender, receiver, message, chatId: userSockets[sender].currentChatId });

});

}

if (sender !== receiver) {

return;

}

} else {

io.emit('newMessage', { sender, receiver, message });

}

});

});


// Privát ablak megnyitása

socket.on('openPrivateChat', ({ sender, receiver, chatId }) => {

console.log(`${sender} megnyitotta a(z) ${receiver} felhasználónak szóló privát ablakot (chatId: ${chatId}).`);

// Hozzuk létre vagy frissítsük a felhasználó socketját

if (!userSockets[receiver]) {

userSockets[receiver] = { sockets: [socket], currentChatId: chatId };

} else {

if (!userSockets[receiver].sockets) {

userSockets[receiver].sockets = [socket];

} else {

userSockets[receiver].sockets.push(socket);

}

userSockets[receiver].currentChatId = chatId;

}

});


// Korábbi privát üzenetek lekérése

socket.on('loadPrivateMessages', ({ sender, receiver, chatId }) => {

db.all('SELECT * FROM messages WHERE (sender = ? AND receiver = ?) OR (sender = ? AND receiver = ?) ORDER BY timestamp ASC',

[sender, receiver, receiver, sender], (err, rows) => {

if (err) throw err;

// Megjelenítjük a felhasználónak az összes privát üzenetet, beleértve az általa írtakat is

socket.emit('loadPrivateMessages', { chatId, messages: rows });

});

});

});


Kliens oldal:


// Üzenet küldése

function sendMessage() {

const messageInput = document.getElementById('messageInput');

const message = messageInput.value.trim();

if (message !== '') {

const sender = document.getElementById('loginUsername').value.trim();

const receiver = '';

const isPrivate = false;

socket.emit('sendMessage', { sender, receiver, message, isPrivate });

messageInput.value = '';

}

}


// Üzenetek megjelenítése

socket.on('newMessage', (data) => {

const messagesDiv = document.getElementById('messages');

messagesDiv.innerHTML += `<p><strong>${data.sender}:</strong> ${data.message}</p>`;

messagesDiv.scrollTop = messagesDiv.scrollHeight;

});

// Korábbi üzenetek fogadása

socket.on('loadMessages', (messages) => {

const messagesDiv = document.getElementById('messages');

messagesDiv.innerHTML = '';

messages.forEach(data => {

if (!data.receiver) {

messagesDiv.innerHTML += `<p><strong>${data.sender}:</strong> ${data.message}</p>`;

}

});

messagesDiv.scrollTop = messagesDiv.scrollHeight;

});


// A kliens oldalon tároljuk a nyitott privát ablakokat

let openPrivateChats = [];


// Privát ablak megnyitása

function startPrivateChat(receiver) {

const sender = document.getElementById('loginUsername').value.trim();

if (privateChatCount < maxPrivateChatCount) {

privateChatCount++;

const privateChatDiv = document.createElement('div');

const chatId = privateChatCount; // A chatId a privát ablak sorszáma lesz

privateChatDiv.classList.add('privateChatWindow');

privateChatDiv.setAttribute('data-chat-id', chatId); // Adjunk hozzá egy adat attribútumot a chatId-hez

privateChatDiv.innerHTML = `

<div class="privateChatHeader" onclick="togglePrivateChat(this)">

<span>${receiver}</span>

<span class="closeIcon" onclick="closePrivateChat(this)">✖</span>

</div>

<div class="privateChatContent" id="privateChatContent${chatId}"></div>

<input type="text" id="privateMessageInput${chatId}" placeholder="Írd ide az üzeneted">

<button onclick="sendPrivateMessage('${sender}', '${receiver}', ${chatId})">Küldés</button>

`;

document.getElementById('chatContainer').appendChild(privateChatDiv);

openPrivateChats.push(chatId); // Adjuk hozzá a chatId-t a nyitott ablakok listájához

// Küldjük el a szervernek, hogy megnyitottunk egy privát ablakot

socket.emit('openPrivateChat', { sender, receiver, chatId });

socket.emit('loadPrivateMessages', { sender, receiver, chatId }); // Töltsük be a korábbi üzeneteket

} else {

alert('Maximum három privát ablak nyitható meg egyszerre.');

}

}


// Privát üzenet küldése

function sendPrivateMessage(sender, receiver, chatId) {

const messageInput = document.getElementById(`privateMessageInput${chatId}`);

const message = messageInput.value.trim();

if (message !== '') {

const isPrivate = true;

socket.emit('sendMessage', { sender, receiver, message, isPrivate });

messageInput.value = '';

}

}


// Üzenetek megjelenítése

socket.on('newPrivateMessage', (data) => {

const messagesDiv = document.getElementById(`privateChatContent${data.chatId}`);

messagesDiv.innerHTML += `<p><strong>${data.sender}:</strong> ${data.message}</p>`;

messagesDiv.scrollTop = messagesDiv.scrollHeight;

});


// Korábbi privát üzenetek fogadása

socket.on('loadPrivateMessages', (data) => {

const messagesDiv = document.getElementById(`privateChatContent${data.chatId}`);

messagesDiv.innerHTML = '';

data.messages.forEach(msg => {

// Megjelenítjük mindenkinek a privát üzeneteket, beleértve a sajátjainkat is

messagesDiv.innerHTML += `<p><strong>${msg.sender}:</strong> ${msg.message}</p>`;

});

messagesDiv.scrollTop = messagesDiv.scrollHeight;

});


// Privát ablak megnyitása vagy bezárása

function togglePrivateChat(header) {

header.parentElement.classList.toggle('closed');

}


// Privát ablak bezárása

function closePrivateChat(closeIcon) {

const privateChatWindow = closeIcon.parentElement.parentElement;

privateChatWindow.remove();

privateChatCount--;

}



máj. 17. 01:23
1 2
 1/19 anonim ***** válasza:
71%

Ugye nem gondoltad komolyan, hogy hozzáértés nélkül egy ilyet meg fogsz tudni normálisan csinálni?

Már ez a kód is sok sebből vérzik.


De egyébként megkérdezhetted volna magát az MI-t is, hogy mi a hiba.

máj. 17. 05:50
Hasznos számodra ez a válasz?
 2/19 A kérdező kommentje:
Igazából ez az egyetlen probléma van, és az összes többi funkció tökéletesen működik. Ha az MI meg tudta volna mondani a hibát, akkor nem írnék ki ide kérdést...
máj. 17. 06:46
 3/19 anonim ***** válasza:
78%

Kezdjük ott, hogy ennek a nagyrésze nem html ;-)

Ami amúgy éppenséggel nem probléma.

máj. 17. 07:18
Hasznos számodra ez a válasz?
 4/19 anonim ***** válasza:
71%

#2


"az összes többi funkció tökéletesen működik"


Jól működik, abban a környezetben, ahol te tesztelted, és jól működik, ha épp nincs semmilyen hiba. Mert amúgy a hibakezelés szinte teljességgel hiányzik belőle.

Vagy amíg valaki bele nem vandálkodik, mert az ellen sincs benne semmilyen védelem.


Ráadásul az egész koncepció rossz, a privát üzenetek adatbázisba mentésének nem szabad attól függnie, hogy a kliensoldalon meg van-e nyitva a chatablak.

És egyébként lehet, hogy pont ez a hiba, hogy nincs nyitva a chat ablak, ezért nem jönnek meg az üzenetek.


De sok más hibalehetőség is van, amit így ránézésre nem biztos, hogy meg lehet mondani. Meg kellene tanulni debuggolni, meg igazából programozni is, ha valaki programozni szeretne...

máj. 17. 07:39
Hasznos számodra ez a válasz?
 5/19 A kérdező kommentje:
Légyszi lincselj meg és kritizáld az egészet, mert megoldást próbálok keresni egyetlen apró problémára a (beillesztett részletnél egyébként sokkal hosszabb) kódban.
máj. 17. 07:55
 6/19 vmg ***** válasza:
87%

"Nem igazán értek hozzá, főleg AI-val csinálgatom"


Ebből nekem,úgy jön le hogy nem igazán tudsz programozni.

Ha kezdő vagy kisebb projekteken kellene dolgoznod, egy egyszerű programon aztán folyamatosan bővíteni, bonyolítani úgy könnyebben fogod látni az összefüggéseket és jobban fogsz tanulni belőle.

máj. 17. 08:10
Hasznos számodra ez a válasz?
 7/19 anonim ***** válasza:
75%

De értsd meg, hogy ennyiből nem lehet megmondani, mi a hiba, pláne úgy, hogy nem látjuk a teljes kódot.

Hosszabb kód esetén úgy illik csinálni, hogy az egész projektet feltolod Githubra, és aki akarja, leklónozza és kidebuggolja neked.

Az is lehet, hogy nem is a bemásolt részletben van a hiba, hanem valahol máshol.


Meg kellene nézni a böngészőben, hogy oda egyáltalán megérkezik-e az üzenet. Megnyomod az F12-t, és figyelgeted a console üzeneteket, meg a hálózat fülön a hálózati forgalmat, ott mi látszik.

máj. 17. 08:12
Hasznos számodra ez a válasz?
 8/19 A kérdező kommentje:
Adott egy kód. Csinálgatom ahogy tudom. Elakadtam. Megoldást bár nem tudok rá találni, de tudom, hogy apróságról van szó. Hát megkérdezem... És lassan már táplálkozási tanácsokat is kapok, de abban a pici hibában senki még csak meg sem próbál segíteni. Köszönöm.
máj. 17. 08:21
 9/19 A kérdező kommentje:
7# A kódban ez az érintett rész, minek küldjem be az egészet? Talán a websocket-en kell valamit állítani vagy a rendszer nem tudja, hogy pontosan melyik ablak van neki megnyitva a három közül... ilyesmire gondolok. Bár nem értek hozzá, de szerintem a megoldás is valami 2-3 sor beillesztése vagy módosítása lehet.
máj. 17. 08:25
 10/19 anonim ***** válasza:
75%

Az, hogy nem igazán értesz még a programozáshoz nem baj. A baj ott van, hogy túl nagy fába vágtad a fejszlédet és csak az AI írja neked a kódot, de valójában nem érted.

Előbb tanulj meg járni, mielőtt futni akarsz! Az AI csak egy eszköz, ami segít gyorsabban megoldani a feladatokat, de a kódot neked kell átnézni és kijavítani, az pedig nem megy, ha nem érted.

máj. 17. 08:44
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!