Avatar billede mtrolle Nybegynder
28. november 2001 - 16:09 Der er 26 kommentarer og
1 løsning

Opdater chat, uden brug af refresh

Hejsa!

Jeg har lavet min egen lille chat, men har et problem! Jeg er ret chat af, at hele rummet blinker, hvert 3. sekund, fordi den skal opdatere teksten! Jeg har fået at vide, at jeg kan undgå dette med et javescript der henter MySQL resultatet og skriver det uden at oprette eller noget deromkring!

Nogle der kan hjælpe?
Jeg bruger:
PHP og MySQL i chatten!
Avatar billede jakoba Nybegynder
28. november 2001 - 17:05 #1
du kan lave en skjult ramme at opdatere i.
i den ramme opdaterer du så ganske som du plejer med 3 sekunders intervaller.

Rammen skrives så med javascript kode i med variabler for de nye tekster og kommandoer der skal tilføjes til chatvinduet. eg:
<html><head>
<script type=\'text/javascript>

var nye = new Array(
        \"supergirl; Ha Ha du er sjov\",
        \"mtrolle; Jeg gider ikke snakke med jer mere\"  //indskrives med asp/php
                      );

function tilfojNyeData() {
    // tilføjer de 2 linien til det der allerede står
    //NB: det er det svære.
    setTimeout( \"self.location.reload(true);\", 2500 );
                  //opdaterer igen om ca 3 sekunder
}
</head>
<body onload=\'tilfojNyeData();\'>
</body></html>

mvh JakobA
Avatar billede mtrolle Nybegynder
28. november 2001 - 17:09 #2
Jamen, vil den så ikke stadig blinke ligesom nu! chatten kan ses på http://www.de-unge.dk/chat/chatten.php?mo=login&room_id=1

Morten
Avatar billede Slettet bruger
28. november 2001 - 17:25 #3
Nej, for det vil kun ændre på indholdet i en <div>, <span>, <layer> eller noget lignende, alt efter browser. Men det kræver, at du laver lidt (mange) fiks-fakserier i dine scripts!
Avatar billede mtrolle Nybegynder
28. november 2001 - 17:35 #4
hmmm - det kan jeg sgu nok ikke finde ud af, hvad skal jeg skriver der hvor beskederne skal vises?
Avatar billede Slettet bruger
28. november 2001 - 17:41 #5
Du skal indsætte følgende:
<span id=\"iespan\"><layer id=\"nslayer\">
Her er chat-indholdet...
</layer></span>
I din skjulte frame skal du så for det første hente alle chatbeskederne ned til i stedet for den synlige som nu. Dette skal du gøre således:
<script>
chatindhold = \"indhold\"; //Denne variabel skal skrives vha. ASP, PHP eller et andet server-side sprog! Den skal indeholde samtlige chat-beskeder for også at virke i NS4.x!

if (document.getElementById) parent.synligFrame.document.getElementById(\"iespan\").innerHTML = chatindhold;
else if (document.all) parent.synligFrame.document.all[\"iespan\"].innerHTML = chatindhold;
else if (document.layers) parent.synligFrame.document.nslayer.document.write(chatindhold);

setTimeout(\"self.location.reload(true)\",3000); //Sætter den skjulte frame til at reloade sig selv hver tredje sekund!
</script>
Avatar billede Slettet bruger
28. november 2001 - 17:42 #6
Her kalder jeg din synlige chat-frame for \"synligFrame\". Dette skal du selvfølgelig ændre til dit eget eksempel!
Avatar billede mtrolle Nybegynder
09. december 2001 - 19:09 #7
Jeg har nu skrevet således:
<html><head>
<META NAME=\"Generator\" CONTENT=\"Stone\'s WebWriter 3.5\">
<script>
chatindhold = \"plom bum!\";
if (document.getElementById) parent.synligFrame.document.getElementById(\"iespan\").innerHTML = chatindhold;
else if (document.all) parent.synligFrame.document.all[\"iespan\"].innerHTML = chatindhold;
else if (document.layers) parent.synligFrame.document.nslayer.document.write(chatindhold);

setTimeout(\"self.location.reload(true)\",3000);
</script>
</head>
<body>
<span id=\"iespan\"><layer id=\"nslayer\">
Chatten er under opdatering og vil ikke virker imens!
</layer></span>
</body></html>
Men den skriver at den laver en fejl på siden, men jeg kan jo som sagt slet ikke finde ud af javascript, så hvis nogen gad at fortælle mig hvorledes jeg retter dette op?

Morten
Avatar billede Slettet bruger
10. december 2001 - 14:25 #8
Er du sikker på, at chat-framen bliver loadet før den skjulte frame? For ellers er det jo klart, at den ikke kan finde objekterne!
Men tjek følgende spm, dér har jeg vejledt omkring næsten det samme emne:
http://www.eksperten.dk/spm/140974
Avatar billede mtrolle Nybegynder
10. december 2001 - 16:10 #9
Jamen jeg har gjort det, at jeg har sat det hele i en frame! Min chat er sat op i frameset og en frame er selve chatindholdet, mens den anden skrives der i! Den med chat indholdet opdateres hvert tredje sekund, men det er forkert eller hvad?
Avatar billede Slettet bruger
11. december 2001 - 15:34 #10
Smider du så ikke lige en URL herind?
Jeg tro nu stadig, du kan bruge spm. 140974 til at løse din opgave, men jeg skal gerne hjælpe dig!
Avatar billede mtrolle Nybegynder
11. december 2001 - 16:09 #11
Jamen jeg har ingen URL til det, for siden findes egentlig ikke, da jeg ikke er sikker på hvad jeg skal skrive, men chatten kan stadig ses på http://www.de-unge.dk/chat/chatten.php?mo=login&room_id=1 og er som sagt delt op jo!
Avatar billede Slettet bruger
11. december 2001 - 21:24 #12
OK, jeg kan se nu i dit indlæg med din kode, ar du har misforstået det lidt, så her følger en slags step-by-step guide:

Step 1: Opret en skjult frame på din side. Det kan du gøre ved at lave chatten.php til et frameset (evt. med et andet filnavn). Læg selve chatten i en synlig frame - kaldet \"chatten\" i dette tilfælde - der fylder 100% af skærmbilledet, og den skjulte frame, som jeg i mit eksempel kalder for \"skjultFrame\", skal derfor ikke fylde noget.
Du kan læse mere om frames her:
http://www.html.dk/tutorials/html/lektion12.asp

Step 2: Din skjulte frames HTML skal se således ud:

<html>
<head>
<script>
chatHTML = \"something\"; //Denne variabel udfyldes med PHP
if (parent.chatten.opdaterSpan) {
parent.chatten.opdaterSpan(chatHTML);
setTimeout(\"self.location.reload(true)\",3000);
}
</script>
</head>
<body>
</body>
</html>

Step 3:
I din chat-frame indsætter du dette imellem <head>-tagsene:

<script>
function opdaterSpans(chatindhold) {
if (document.getElementById) document.getElementById(\"iespan\").innerHTML = chatindhold;
else if (document.all) document.all[\"iespan\"].innerHTML = chatindhold;
else if (document.layers) document[\"nslayer\"].document.write(chatindhold);
}
</script>

Step 4:
I dit <body>-tag i chat-framen skal du indsætte følgende:
<body ... onLoad=\"parent.skjultFrame.reload(true);\">

Step 5:
Indsæt dette i chat-framens HTML, dér hvor chatten skal være:

<span id=\"iespan\"><layer id=\"nslayer\">
De-Unge.dk\'s chat!
</layer></span>

Step 6: Sæt det hele i aktion og upload det, så jeg kan hjælpe dig med eventuelle fejl og mangler! :)
Avatar billede mtrolle Nybegynder
11. december 2001 - 22:40 #13
Så har jeg loadet det hele op, uden held :( Jeg er helt lost i det her! Jeg kan godt lave det med iframes kan jeg ik?

Morten
Avatar billede Slettet bruger
12. december 2001 - 17:51 #14
Nej, du kan ikke lave det med en iframe, så forsvinder hele idéen jo, da sådan én bliver loadet sammen med selve siden. Desuden har du misforstået mit script fuldstændig.
Du bliver nødt til at lave en skjult frame, fx:

<frameset rows=\"*,0\" frameborder=\"NO\" border=\"0\" framespacing=\"0\" cols=\"*\">
      <frame name=\"chatten\" src=\"chat.php\" scrolling=\"NO\" noresize>
      <frame name=\"skjultFrame\" scrolling=\"NO\" noresize src=\"skjult.php\">
    </frameset>
Avatar billede mtrolle Nybegynder
12. december 2001 - 20:55 #15
http://www.de-unge.dk/chat/chatindhold.php?room_id=1 er hele dit script og der kommer altså fejl på siden!
Jeg har også prøvet at lave den frame som du sagde:
http://www.de-unge.dk/chat/chatvis.php?room=1

Jeg kan ikke se fejlen i forhold til hvad du har skrevet til mig!
Avatar billede Slettet bruger
13. december 2001 - 16:29 #16
Du har stadig en masse fejl. I http://www.de-unge.dk/chat/chatindhold.php?room_id=1 må PHP ikke spytte gåseøjne ud, da det slutter variablen. Du kan evt. vælge at starte og slutte med apostroffer i stedet for gåseøjne, så behøver du ikke at rette i dit PHP-kald.
Desuden skal du på samme side ændre alle forekomster af \"chatten\" (der er kun én) til \"vischat\".
Desuden har jeg lavet nogle fejl:
http://www.de-unge.dk/chat/ny-chat.php?room_id=1 skal:
function opdaterSpans(chatHTML) {
ændres til:
function opdaterSpan(chatHTML) {
Avatar billede mtrolle Nybegynder
13. december 2001 - 17:38 #17
Nu har jeg rettet de fejl du har skrevet her, men det virker (desværre) stadig ikke :(
Avatar billede Slettet bruger
13. december 2001 - 21:32 #18
Du har altså ændret en hel del på mine scripts. Siden http://www.de-unge.dk/chat/ny-chat.php?room_id=1 skal se sådan ud:

<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\">
<HTML>
<HEAD>
    <TITLE>chatbeskeder</TITLE>
<META NAME=\"Generator\" CONTENT=\"Stone\'s WebWriter 3.5\">
<script>
function opdaterSpan(chatHTML) {
if (document.getElementById) document.getElementById(\"iespan\").innerHTML = chatHTML;
else if (document.all) document.all[\"iespan\"].innerHTML = chatHTML;
else if (document.layers) document[\"nslayer\"].document.write(chatHTML);
}
</script>
</HEAD>
<BODY BGCOLOR=\"#666699\" onLoad=\"parent.frames[\'chatindhold\'].location.reload(true);\">
<FONT FACE=\"Arial\" SIZE=\"2\"><span id=\"iespan\"><layer id=\"nslayer\">
Opdatering af chatten sker for tiden!<BR>Vi regner med at kunne være klar i løbet af de næste par dage!!!
</layer></span></FONT>
</BODY>
</HTML>

Den på http://www.de-unge.dk/chat/chatindhold.php?room_id=1 skal til gengæld se sådan her ud:

<html>
<head>
<META NAME=\"Generator\" CONTENT=\"Stone\'s WebWriter 3.5\">
<script>
chatHTML = \'noget\'; //Denne variabel udfyldes med PHP
if (parent.frames[\'chatten\'].opdaterSpan) {
parent.frames[\'chatten\'].opdaterSpan(chatHTML);
setTimeout(\"self.location.reload(true)\",3000);
}
</script>
</head>
<body>
</body>
</html>
Avatar billede mtrolle Nybegynder
13. december 2001 - 22:24 #19
Jeg er ked af at sige det!
Jeg har nu skrevet præcis som du har skrevet her! Intet er lavet om, meen den laver en error nede i statusbaren stadig! Jeg har intet gjort, har kopieret dit direkte ind! intet!

Morten
Avatar billede Slettet bruger
14. december 2001 - 15:52 #20
Jeg har lagt et eksempel ud her: http://www.friserverplads.dk/phoenixv/vischat.html
Og det virker helt fint. Jeg kan ikke umiddelbart finde fejlen i dine koder, men da mit eksempel virker, foreslår jeg, at du går 100% ud fra mine filer og mit frameset, kalder framesne de samme navne, o.s.v.
Så får vi se!

P.S. Min variabel bliver ikke fyldt ud med PHP, men bare med et lille tilfældigheds-script!
Avatar billede mtrolle Nybegynder
14. december 2001 - 17:45 #21
Med lidt vilje fik jeg nu det hele til at fungere. En af problemerne var, at jeg ikke kunne loade det i resten af layoutet, for jeg lavede det hele op til det sidste nye du skrev og derefter virkede det når jeg gik ind på chatvis.php, men ikke hvis jeg loadede hele siden, jeg prøvede så at lave chatten uden for layoutet og det hjalp!!!

TUSIND TAK FOR DEN STORE HJÆLP!!!
Avatar billede Slettet bruger
15. december 2001 - 12:49 #22
Det var så lidt! Jeg er også rigtig glad for, at det virker nu!
Avatar billede cpfrande Nybegynder
06. januar 2002 - 18:38 #23
Phoenixy >> hvad er din mail???
Skal have hjælp til dit script her også. Jeg har fået det til at virke, der skal bare bygges noget ind i det ;D

- Frande
Avatar billede cpfrande Nybegynder
06. januar 2002 - 18:39 #24
Eller ICQ, hvis dette haves ;D
Avatar billede mtrolle Nybegynder
06. januar 2002 - 22:59 #25
Hmm - hvorfor virker det egentlig ikke på en netscape browser? Burde det ikke det?
Avatar billede Slettet bruger
07. januar 2002 - 12:53 #26
mtrolle>> Jo... prøv at tage det op som et nyt spm, for jeg kan ikke finde fejlen!

cpfrande>> phoenixv@post.com
Avatar billede mtrolle Nybegynder
19. januar 2002 - 07:26 #27
Dette spørgsmåls slutning:
http://www.eksperten.dk/spm/155409
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

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