Oprettet fre. d. 24. august 2012 kl. 10:36:38

klaus_a
klaus_a (23.795 point. Point ude: 120)

ASP minichat skal reloade uden "klik" og læses oppe fra og ned

Hej,

Jeg har en lille minichat lavet i .asp - jeg vil bruge til en funktion på mit site, men den er gammel og står og reloader indholdssiden hele tiden, hvilket giver et lille "klik" hver gang.

Hvordan kan man lave et eller andet med AJAX eller JS der henter indholdsiden ind uden at den klikker hele tiden?

Og dernæst er den af den gamle slags hvor nyeste indlæg kommer nederst, er der nogen der ved hvordan man får nyeste indlæg til at ligge øverst?

Jeg kan desværre ikke arbejde i andet end .asp, så andre sprog er pt ikke en mulighed.

Mvh

Klaus

Skrevet fre. d. 24. august 2012 kl. 11:35:35| #1

maddog_em
maddog_em (7.150 point)
Hej

bliver chat indlæg gemt i en db, for så kan du bare indsætte ORDER BY kolonne_navn DESC

Skrevet fre. d. 24. august 2012 kl. 11:37:03| #2

maddog_em
maddog_em (7.150 point)
hvis det er en db løsning så prøv dette

strSQL = "select * FROM db_navn ORDER BY Id DESC "

Skrevet fre. d. 24. august 2012 kl. 13:11:35| #3

klaus_a
klaus_a (23.795 point)
Hmmm.... det gjorde den egentligt ikke, men det var en god idé, den vil jeg prøve, tak :-)

Nogen forslag til en måde at loade indholdsvinduet så det ikke klikker?

Med venlig hilsen

Klaus

Skrevet fre. d. 24. august 2012 kl. 14:34:51| #4


Skrevet fre. d. 24. august 2012 kl. 14:49:40| #5

softspot
softspot (106.464 point)
blog.softspot.dk
Du skal nok indstille dig på også at skulle arbejde med JavaScript, hvis du skal lave en løsning som undgår opdatering via frames...

Du kunne hente chatdata og opdatere chatbeskedvinduet med et kald á la (ved brug af jQuery):

// lastId skal være global, dvs. tilgængelig på tværs
// af opdateringskald til serveren
var lastId = 0;


function opdaterChat() {
  $.ajax({
    url:'/chat/opdater.asp',
    type:'POST',
    data:{lastId:lastId},
    success: function(data) {
      // opdater chatvinduet...
      $.each(data.beskeder, function(i,v) {
        $("#chatbeskeder").prepend("<div class='besked'>" + v.Tekst + "</div>");
        lastId = v.Id;
      });
    },
    completed: function() {
      // opdater chatten igen om 5 sekunder...
      setTimeout(opdaterCat, 5000);
    }
  });
}

$(function() {
  // sæt chatten til at opdatere første gang om 5 sekunder
  setTimeout(opdaterCat, 5000);
});


Det er helt skudt fra hoften og komplet utestet, men idéen er der.

Du skal så sørge for at du (fra /chat/opdater.asp) kun returnerer de beskeder som er nye siden lastId.

opdater.asp skal returnere JSON i formatet:

{ beskeder: [{Id:1, Tekst:'tekst'},{Id:2, Tekst:'tekst'}] }

Skrevet fre. d. 24. august 2012 kl. 16:09:35| #6

klaus_a
klaus_a (23.795 point)
Hmmm... jeg kan bruge lidt js, og gør det af og til, men jeg må nok tilstå at jeg skal have det serveret mere mundret før jeg kan få det til at virke, samt en forklaring på hvad det gør.

Det du har lavet dér, skal det hente noget fra en db, eller opdatere det slet og ret en side i en frame/iframe eller opdatere det indhold på en side?

men tak alligevel

Med venlig hilsen

Klaus

Skrevet fre. d. 24. august 2012 kl. 17:26:06| #7

softspot
softspot (106.464 point)
blog.softspot.dk
Hvordan du gemmer/behandler chatbeskederne på serveren er op til dig, men det kunne hentes fra en database (vælg alle chatbeskeder med id større end lastId og hvor Id er et autonumber i databasen). Jeg vil dog anbefale dig at du cacher chatbeskederne i et tidsrum, for at undgå for megen databaseaktivitet...

Jeg ville lave et div med id = chatbeskeder på siden, som så kunne opdateres med data fra serveren.

Skrevet fre. d. 24. august 2012 kl. 18:06:19| #8

olebole
olebole (216.713 point)
<ole>

Husk at indsætte et timestamp sammen med alle beskeder. Så kan du styre, hvilke beskeder brugeren har set og kun sende ham de beskeder, han endnu ikke har set.

Og gør som softspot viser: Lad være med at HTML-formatere beskederne på serveren. Send rå data tilbage og formater dem på klienten.

I udgangspunktet er scriptsprog ikke egnet til chat applikationer. En chat, skrevet i VBS eller PHP, er altid en applikation med overordentlig ringe effektivitet, hvorfor det gælder om at optimere på alle hylder  =)

/mvh
</bole>

Skrevet fre. d. 24. august 2012 kl. 19:32:11| #9

softspot
softspot (106.464 point)
blog.softspot.dk
ole >> tanken var at styre hvilke beskeder brugeren har set, med lastId og et autonumber id i databasen.

Skrevet fre. d. 24. august 2012 kl. 21:11:01| #10

olebole
olebole (216.713 point)
#9: En absolut ligeså god fremgangsmåde som mit forslag! Ved millionader af beskeder kan man selvfølgelig med tiden løbe tør for plads i ID-feltet, men det bliver næppe tilfældet  *o)

Skrevet fre. d. 24. august 2012 kl. 21:13:26| #11

olebole
olebole (216.713 point)
PS: I 2038 løber vi i øvrigt også tør for plads i et UNIX-timestamp, så deeeeeeeeet ...  =)

Skrevet fre. d. 24. august 2012 kl. 22:31:45| #12


Skrevet fre. d. 24. august 2012 kl. 23:34:48| #13

olebole
olebole (216.713 point)
At fremtiden synes lys for pessimisterne er skam ikke noget at grine af!  *D

@klaus_a: For at komme tilbage til chatten, så skriv endelig en efter softspots ekesmpel i #5. Du lærer en masse, og hvis den ikke skal bære mange samtidige brugere, kan du sagtens skrive den i VBS/ASP.

Det vigtigste er, at du hele tiden tænker effektivitet. Dvs kun at hente de nødvendige beskeder - og gøre det med rimelige intervaller (5 sekunder er et udmærket bud. Nok ikke mindre). Desuden bør du indeksere din tabel og holde forespørgslerne til den så simple som muligt.

Og så lad brugerens browser udføre så meget af arbejdet som muligt. Den står og strutter af ubrugte RAM- og CPU-vitaminer, mens den slags ofte er i underskud på serveren  =)

Skrevet fre. d. 24. august 2012 kl. 23:45:27| #14

softspot
softspot (106.464 point)
blog.softspot.dk
I 2038 er det sgu nok nogle andre end os der sidder og tager stilling til hvad de skal gøre med de der UNIX-timestamps :-)

Mht. håndteringen af chatbeskederne i databasen, vil jeg umiddelbart undgå at hente dem i databasen hver gang opdater.asp kaldes. Benyt databasen som en log over de beskeder der sendes (dvs. kun til historik) og gem beskederne i en cache (f.eks. et MSXML2.FreeThreadedDomDocument), hvorfra du hurtigt kan finde dem frem. Du kan f.eks. bruge en XSLTProcessor (som er cached) til at generere JSON-outputtet... Den cache kan du så rydde op i med passende intervaller, så den ikke sluger hele serverens hukommelse med tiden.

Skrevet tir. d. 28. august 2012 kl. 10:57:13| #15

softspot
softspot (106.464 point)
blog.softspot.dk
Er du kommet videre, klaus?

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   


Seneste spørgsmål

Logge ASP fejl

Oprettet den 12. maj 2013 kl. 19.37
loukas giver 60 point for svar | Giv et svar »

Adskil med dato

Oprettet den 10. maj 2013 kl. 20.26
EveryMA giver 60 point for svar | Giv et svar »

Sammenlign uddrag af url med uddrag af db felt

Oprettet den 5. maj 2013 kl. 00.33
stsejs giver 30 point for svar | Giv et svar »








Tips & Tricks fra PC World

Teaser billede

Her er seks Google Labs-funktioner, som du skal slå til med det samme

Gmail Labs giver dig adgang til en masse smarte funktioner, som Googles ingeniører leger med i øjeblikket.


Anmeldelser fra PC World

Teaser billede

Test: Samsung Galaxy S4 er et hit - trods gøglertricks

Kan Samsung beholde førertrøjen i det store Android-race? Galaxy S4 er smækfyldt med innovative funktioner, men også med en del gøgl. Er det for meget? Få vores dom over Samsungs nye topmodel.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Tre smarte trick som gør Windows 8 bedre

Boot direkte til skrivebordet, få en strategisk godt placeret luk-knap og slip for at logge ind. Her er tre tips til Windows 8, som gør det nemmere at blive venner med styresystemet.


Nyheder fra Computerworld

Teaser billede

Galleri: Her er Googles nyeste værktøj og legetøj

Google har i denne uge afholdt udviklerkonferencen I/O i San Francisco. Se her hvad søgegiganten kunne præsentere af nyskabelser.


IT Kurser
Samarbejdspartnere

Udgiver · © 2013 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger