Avatar billede teekay Nybegynder
06. august 2007 - 18:05 Der er 16 kommentarer og
1 løsning

AJAX: Fejl når der sendes en længere tekst fra et textarea

Hej alle sammen! Jeg er ny her på eksperten, men er ikke i tvivl om at i kan hjælpe mig med mit lille problem.

Jeg er i gang med at lave et forum helt fra bunden, til en side for piger. Det er muligt at "preview" sit indlæg inden det postes, og i den forbindelse opdagede jeg at jeg fik en javascript fejl i IE (der opstod en udefineret fejl), og der sker intet i FireFox heller, på linjen med:

http.open("GET", url, true);

Fejlen opstår når jeg skriver en længere tekst i tekstfeltet (omkring 2000 tegn).. teksten sendes med ajax til en php-fil som f.eks. fjerner html og nogle andre ting, og returnerer resultatet, som så opdateres på siden med innerHTML.

Det korte af det lange.. Preview funktionen virker egentlig som den skal, men når det drejer sig om en lang tekst, sker der en fejl (i http.open går jeg ud fra) og ingen tekst returneres.

Jeg er ikke specielt rutineret i ajax, og dette er ved at være ret frustrerende, så alt hjælp ville være kanon!

PS. Er der nogle klassiske fejl jeg skal være speciel opmærksom på, når jeg laver et forum der skal bruges af 30.000+ brugere?

Mvh. Troels
Avatar billede thesurfer Nybegynder
06. august 2007 - 18:09 #1
"GET" bruges til et mindre antal tegn.
Hvis du skal sende meget, skal du bruge "POST"..
Avatar billede teekay Nybegynder
06. august 2007 - 18:12 #2
Haha, jeg var begyndt at tænke lidt på at prøve med POST, men faldt over et indlæg der påstod at man kunne bruge nærmest uendeligt lange URLs med GET...

Jeg prøver lige at se om jeg kan få det omvendt til at bruge POST, og så vender jeg tilbage.. Mnage tak for det hurtige svar!
Avatar billede thesurfer Nybegynder
06. august 2007 - 18:15 #3
Så vidt jeg ved, er GET meget mere begrænset end POST.
Længden af URL er også begrænset.. kan dog ikke huske til hvor mange tegn..

Eksempel på AJAX med POST: http://www.openjs.com/articles/ajax_xmlhttp_using_post.php
Avatar billede w13 Novice
06. august 2007 - 18:29 #4
Ajax er dog meget svært at bruge rigtigt og med så mange brugere, der kan bruge Ajax-funktionen på samme tid, vil du højst sandsynligt opleve, at din server sløves stort. Hvornår kalder du funktionen? Hver gang noget er blevet indtastet i textareaet eller blot når brugeren vælger "preview"?

Jeg ved, det er et kedeligt forslag, men jeg ville nok foreslå dig at foretage fjernelsen af HTML med JavaScript. Det vil hjælpe gevaldigt på serverens og browserens kraft.
Avatar billede teekay Nybegynder
06. august 2007 - 18:40 #5
w13.. Den foretages ved et tryk på en "Vis indlæg" knap, grunden til at også bliver sendt til en php-fil er at der bruges forum-kode i stil med phpBB kode osv.

Desuden kan en snu person vel gemme kildekoden, og så slette javascript delen der fjerner html og så køre siden lokalt.

Derudover kontrolleres der i php filen om man er admin/mod, hvilket tillader brug af HTML.

Er det mere krævende at bruge ajax på denne måde, end at sende dem til en decideret preview side? Man skal jo være god ved ens server hehe
Avatar billede thesurfer Nybegynder
06. august 2007 - 18:55 #6
Jeg vil mene, at det er en dårlig ide, at bruge AJAX til det her.. brug hellere en ganske alminde post..
Avatar billede w13 Novice
06. august 2007 - 19:03 #7
Jep, som Thesurfer siger. =)
Og du har jo helt ret i, at man sagtens kan undgå javascript-koden, hvis man kender bare lidt til det, og det er der jo ikke meget at gøre ved.

JavaScript er bedst for bruger og server, når der skal valideres/udføres kommandoer som din, men desværre kan det omgåes. Derfor bør man også gardere sig med både JavaScript og et ServerSide-sprog, desværre. Det er skod, at det er sådan, men hvis man vil være sikker, er det måden.

Hvis du søgte på Eksperten-brugeren Olebole, ville du finde ud af, at omkring 30% af alle hans svar her på Eksperten handler om, hvor forsigtigt man skal omgåes AJAX - som regel slet ikke. Et af hans argumenter er som regel, at næsten ingen kan finde ud af at bruge det ordentligt, og at Googles folk faktisk er nogle af de eneste, han har set, der gør det ordentligt.

Ajax kan være enormt smart til eksempelvis løbende at vise nye indlæg/nyheder uden at siden opdateres, men det bør bruges mindst muligt, og helst slet ikke i situationer som din.
Avatar billede jakobdo Ekspert
06. august 2007 - 19:05 #8
Denne side er måske et kig værd: http://www.boutell.com/newfaq/misc/urllength.html
Avatar billede olebole Juniormester
06. august 2007 - 19:54 #9
<ole>

Desuden mister man hukommelse i IE, når man sender XMLHttpRequests med metoden 'get'.

Et forum som Eksperten er der trillionader af links, der peger mod på Google. Det er fordi, Google og andre søgemaskiner kan læse indlægene.
Da søgemaskiner ikke kan JavaScript, ville dette ikke være tilfældet, hvis sitet var AJAX-drevet ... værd at tænke over  =)

/mvh
</bole>
Avatar billede teekay Nybegynder
06. august 2007 - 22:56 #10
AJAX bruger jeg kun for at sende teksten igennem en lille php fil, der fjerner HTML og laver forumkode om til HTML ligesom BB kode i phpBB.. alternativet er jo at submitte en alm. form som i siger, men der indlæses jo også en ny side.. og skal denne redigeres så skal en ny side indlæses..

Med denne metode kan man se sit indlæg ved at trykke "vis indlæg".. I mine øjne vil det  give det samme??? Jeg har lagt mærke til at bla. Joomla benytter sig af preview på samme måde.. er det virkeligt så skidt?? Det er jo ikke noget der ligger og trækker på serveren andet end når brugeren vil se "preview" sit indlæg..

Jeg kan godt skrive url til eksemplet hvis i er i tvivl om hvad jeg mener?
Avatar billede olebole Juniormester
06. august 2007 - 23:30 #11
Der er ikke noget galt i det, hvis man kan kode det. Problemet er, at det er svært uden at miste hukommelse i IE - og hvis det skal kodes rigtigt.

Mange løsninger bruger innerHTML, som dels:
1) aldrig har været valid i nogen standard
2) overskriver dokumentfragmentet, den bruges på - hvilket betyder tab af referencer til og fra fragmentet
3) er komplet inkompatibel med XHTML

I AJAX formateres data som XML eller JSON på serveren, inden de returneres til klienten. Her oprettes HTML-elementer med DOM - de fyldes med data - og indsættes i dokumentet.

Dét er AJAX ... ikke det 90'er slamkode, der vises i div. tutorials - eller bruges i div. såkaldte AJAX-libraries  =)
Avatar billede jakobdo Ekspert
07. august 2007 - 07:34 #12
Olebole: Kunne du ikke lokkes til at skrive en artikel om netop AJAX og hvordan det rigtigt skal bruges?
Avatar billede teekay Nybegynder
07. august 2007 - 10:07 #13
thesurfer, tak for den hurtige hjælp! skriver du et svar? Og tusind tak til alle jer andre!! :)
Avatar billede thesurfer Nybegynder
07. august 2007 - 11:29 #14
Yep :-)
Avatar billede olebole Juniormester
07. august 2007 - 14:59 #15
jakobdo >> Jeg har en lille flok på vej  =)

Jeg begyndte for nogen tid siden at skrive en artikel om en X-browser wrapper for XMLHttpRequest-objektet, men fandt udaf, at jeg måtte skrive en masse mere, hvis emnet skulle dækkes ordentligt.
Jeg regner med at loade en del op på www.dengodekode.dk i løbet af slutningen af denne og næste måned - men mon ikke, det bliver nævnt i en tråd eller to  ;o)
Avatar billede w13 Novice
23. november 2007 - 00:00 #16
Lukketid?
Avatar billede thesurfer Nybegynder
23. november 2007 - 10:40 #17
olebole, din slacker.. kom igang med noget AJAX.. ;-)


teekay> Husk at markere navnet i boksen til venstre, inden du klikker på Accepter-knappen.. ellers sker der ikke noget.. :-)
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