Avatar billede imnewb Nybegynder
13. august 2005 - 19:23 Der er 10 kommentarer og
1 løsning

JavaScript: Indsætter utrolig meget tekst.

Hej, jeg er igang med en tekstchat til en ven, men har et problem.
Når jeg giver udtræk ud fra databasen og indsætter det til en javascript funktion går den fuldstændig amok.

Hvad gør jeg forkert? - Den skal kun udskrive den tekst én gang, samtidigt med at udskrive det fra databasen selfølgelig.

Her er min side hvor den udskriver dataer:

<script>

<?php
$hentTekst = mysql_query("SELECT * FROM text ORDER BY id DESC LIMIT 0,15");
while ($row = mysql_fetch_array($hentTekst)){
?>


parent.insertText('<?php echo "$row[navn]"; ?>','<?php echo "$row[tekst]"; ?>');


<?php } ?>

setTimeout("location.reload(true)",500);
</script>


og her er funktionen:

function insertText(navn,tekst){
document.getElementById('text').innerHTML += '<div id="navn">'+navn+'</div>'+tekst+'<br />';
}
Avatar billede roenving Novice
13. august 2005 - 19:29 #1
Hvis du kigger i kilden (Vis kilde i browseren !-) har du vel en hulens masse script ?-)

-- og en reload hvert ½ sekund kan tvinge enhver server i knæ, hvis der bare er et par brugere !o]
Avatar billede imnewb Nybegynder
13. august 2005 - 19:30 #2
udskriver dette i kildekoden:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<body>
<script type="text/JavaScript">


parent.insertText('test','test');


parent.insertText('JegHedderAnders','tkijd fjskd ksdfjkjsd fjsdf sf');



window.status='ChatLog';
setTimeout("location.reload(true)",1000);

</script>

</body>
</html>
Avatar billede imnewb Nybegynder
13. august 2005 - 19:34 #3
den skal kun indsætte i insertekst
fx:
test: test
JegHedderAnders: tkijd fjskd ksdfjkjsd fjsdf sf


og ikke hele tiden hver gang den opdatere. Hvad gør jeg forkert? Har ellers brugt det system hver gang uden problemer
Avatar billede roenving Novice
13. august 2005 - 19:35 #4
Nu tilføjer du jo så hvert sekund teksten til det, der i forvejen står der ...
Avatar billede imnewb Nybegynder
13. august 2005 - 19:36 #5
Ja nemlig, men hvordan gør jeg sådan den ikke gør :)? læs 19:34:58
Avatar billede roenving Novice
13. august 2005 - 19:38 #6
Starter med at tømme indholdet:

<script type="text/JavaScript">
document.getElementById('text').innerHTML = "";

parent.insertText(...

-- iøvrigt er det ikke tilladt at have flere elementer med samme id, så du skal nok bruge f.eks. en class til navn-diven !-)
Avatar billede imnewb Nybegynder
13. august 2005 - 20:03 #7
Tak.
Ved du så hvordan man linker til en div i en iframe?

Har lavet ved menuen : ryd tekst hvor den går til rydTekst(); i rydTekst funktionen har jeg:

function rydTekst()
{
document.chattext.getElementById('text').innerHTML = " ";
}

----------------------
chattext er iframe navnet

text er diven, men den sletter ikke, hvorfor?

smid svar forresten
Avatar billede imnewb Nybegynder
13. august 2005 - 20:04 #8
har lavet document.chattext. skulle byttes om ;)
Avatar billede roenving Novice
13. august 2005 - 20:05 #9
window.chattext.document.getElementById('text').innerHTML = " ";

Velbekomme '-)
Avatar billede roenving Novice
13. august 2005 - 20:38 #10
-- og tak for point ;~}
Avatar billede olebole Juniormester
14. august 2005 - 03:32 #11
<ole>

Problemet er i virkeligheden et helt andet  :)
Brugeren skal kun have den besked én gang. De efterfølgende gange, der opdateres skal der ikke udskrives noget, brugeren allerede har set. Ellers spilder du enorme mængder server-resourcer ... og en chat-applikation er i forvejen nok det mest resource-ædende, du kan skrive (bortset fra nogle SQL-udtræk i en uendelig løkke).

Det klares ved at alle beskeder indsættes sammen med et timestamp i tabellen.
Når en bruger requester for nye beskeder, checkes en cookie for et timestamp. Alle beskeder siden dette hentes fra DB'en (har han ingen cookie, hentes de seneste 15). De hentede beskeder udskrives til brugeren - og han får sat en cookie med et timestamp.

Desuden bruges * (næsten) kun i SQL-eksempler. I den virkelige verden bruges den yderst sjældent. I stedet hentes _kun_ de felter, man har brug for. Det betyder rigtig meget i performance henseende.
Husk i den forbindelse også at indeksere kolonnen med timestamp'et  ;o)

Hvis du checker brugerens autensitet ved hjælp af en session, så overvej, om det er en alvorlig sikkerhedsrisiko, hvis han kan hente/læse beskeder uden at blive checket - eller evt. om en cookie kan gøre det.
At læse en PHP-session kræver normalt, at man først læser session-navnet i en cookie - og derefter lader filsystemet finde en fil med det navn i en bestemt mappe på serveren. Derefter skal filen åbnes, for at man kan læse session-variablerne.

Sidst - men absolut ikke mindst - skal du vælge et realistisk interval for opdateringen. Et halvt sekund er urealistisk - grænsende til det hysterisk morsomme. Et sted mellem 5 og 15 sekunder er langt mere realistisk  ;o)

/mvh
</bole>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester