Avatar billede hells Nybegynder
01. marts 2008 - 13:37 Der er 17 kommentarer og
1 løsning

XMLHttpRequest og plustegn

Her forleden, da jeg sad og kiggede på side med ajax, jeg lavede for et stykke tid siden, opdagede jeg, at det ikke virkede helt. Efter lidt kiggen på det, fandt jeg grunden, som er at plustegnene blev sendt til serveren (gennem XMLHttpRequest-objektet) som mellemrumstegn.

For at illustrere og teste har jeg lavet den her side: http://hells.dk/plustest.asp
Hvis man trykker på test-knappen, sendes værdien af formfeltet til serveren, som så sender det uændret tilbage, hvorefter det vises med en alertboks til brugeren. Jeg har foretaget en test, der viser at plustegnene omformes før de kommer til serveren.

Koden, der bruges til at sende formfeltets værdi, er:
  req.open("POST", "/plustest.asp", true);
  req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  req.send("tekst="+escape(form.tekst.value));

hvor form er form-elementet.

Så spørgsmålet er, om der er nogen her, der ved, hvorfor det sker, samt hvad man kan gøre for at afhjælpe det.
Avatar billede w13 Novice
01. marts 2008 - 13:55 #1
Har du så ikke samme problem med æ,ø og å, samt andre specialtegn?
Avatar billede w13 Novice
01. marts 2008 - 13:55 #2
Og hvad, hvis man skriver & ? :)
Avatar billede erikjacobsen Ekspert
01. marts 2008 - 14:10 #3
escape-funktionen er tudsegammel, og ikke tiltænkt den funktionalitet. Du kan sikkert klare dig ved at erstatte den med  encodeURIComponent
Avatar billede olebole Juniormester
01. marts 2008 - 16:26 #4
<ole>

- men det undrer mig, du bruger en XHTML 1.1 DTD, når du skriver noget, der mest af alt minder om HTML 4.01 Transitional - og i øvrigt server dokumentet som alm. HTML. Der er intet ved dit dokument, der kommer i nærheden af XHTML 1.1  =)

/mvh
</bole>
Avatar billede hells Nybegynder
01. marts 2008 - 17:55 #5
erikjacobsen > Det fik det til at virke. Ved du så, om det er den funktion, der er den bedste til formålet. Og du gerne lægge et svar, så jeg kan give dig nogle point.

w13 > å'et virkede heller, men efter erikjacobsens løsning gør det.

ole > Ja, jeg ved godt, at det dokument, jeg henviser til, ikke er lægger sig særligt tæt op ad xhtml eller den kodeskik, der forbindes dermed. Men netop det dokument er heller ikke ment som noget, der skal opfylde nogen html-standard, da det blot er ment til test og ikke skal vises for mangt og mange.
Grunden til at den så har en xhtml 1.1 doctype er simpelthen, at jeg har givet den det af ren vane, fordi jeg i sin tid fik mig til at se mig selv som en, der koder i xhtml 1.1. Nu du nævner det, kan jeg selvfølgelig godt se, at det er fjollet, og det har heller ikke gjort anden gavn end at træne mig en smule i at kunne huske linjen til doctypen udenad ;).
Det med dokumentets content-type skal jeg dog lige have kigget på, for der gør jeg vist også noget forkert på et par sider, der egentlig er xhtml 1.1.
Avatar billede erikjacobsen Ekspert
01. marts 2008 - 18:08 #6
Jeg samler slet ikke på point, tak.
Avatar billede hells Nybegynder
01. marts 2008 - 18:13 #7
Nå, for søren.

Så må det jo være w13 og olebole, der må deles om dem. Så hvis I vil lægge et par svar, så vil jeg blive glad:)
Avatar billede olebole Juniormester
01. marts 2008 - 18:20 #8
hells >> Det er ikke kun et spørgsmål om Content-Type. XHTML 1.1 er XML, hvorfor du bør bruge DOM Level 3. I DOM findes der dog ikke en metode til aflæsning af dynamiske properties - f.eks. et form-elements value-attribut. Det eneste, du kan gøre, er:
    var sVal = ELEMENT_REFERENCE.value;

- som er ren HTML-DOM (IDL), der absolut ikke kan anvendes til noget fornuftigt under X(HT)ML.

Vær i øvrigt også opmærksom på, at din XML deklaration i toppen af dokumentet disable'er de væsentligste dele af CSS standarden i IE6  ;o)
Avatar billede hells Nybegynder
01. marts 2008 - 18:44 #9
ole > Jeg er ikke helt sikker på, at jeg er med her, men prøver du at sige, at der mellem dynamiske sider og xhtml findes et kontrastforhold? Og at man bør bruge en html-doctype i stedet, hvis man vil arbejde med indtastning i formfelter og ajax?

Det med IE6 ved jeg egentlig godt. Men lige nu er jeg blevet mere overrasket over, at IE7 ikke vil vise min side, nu jeg via ASP har ændret min content-type, men i stedet tror det er en fil, jeg vil gemme på computeren. Kan man virkeligt ikke gøre det sådan, og er det et meta-tag, der skal til?
Avatar billede olebole Juniormester
01. marts 2008 - 19:54 #10
Nej, IE7 understøtter slet ikke den korrekte MIME-type. XHTML er elendigt understøttet på WWW, men det bliver nu også først rigtig seriøst med XHTML 2.0, hvor vi samtidig får XForms og XMLEvents  :)

Der mangler overensstemmelse mellem de nuværende forms og DOM. Den eneste måde, du kan læse attributter i DOM, er at bruge getAttribute metoden. Den må dog kun returnere den værdi, attributten havde ved indlæsning af siden - altså det, der står skrevet i tagget.

Det betyder, at getAttribute ikke må returnere værdien af et tekstfelt, hvis værdien er ændret af brugeren. Det eneste, den må returnere, er den property, der i IDL hedder 'defaultValue' ... altså det, koderen skrev i tagget.

Det samme gælder i øvrigt for checked-attributten. Den kan heller ikke aflæses under XHTML, der skal tolkes som XML. Kun når dokumentet tolkes som HTML, kan du aflæse en form kontrols evt. dynamiske properties.

Prøv også at læse disse to:
    http://www.eksperten.dk/artikler/537
    http://www.eksperten.dk/artikler/538
Avatar billede erikjacobsen Ekspert
01. marts 2008 - 20:05 #11
Og Pixie-udgaven: XHTML kan på dette sted i historien ikke bruges til noget.
Avatar billede hells Nybegynder
01. marts 2008 - 20:10 #12
Jeg havde på fornemmelsen, at det var noget hen i den retning, jeg skulle indse, og egentlig passer det mig ikke så dårligt. Dog kan jeg se, at der er et par (for mig) nye idéer, der skal have sat sig fast.
Avatar billede olebole Juniormester
01. marts 2008 - 20:20 #13
- og den let udvidede Pixie-udgave siger:
Der er webkode, som ikke giver mening under HTML - f.eks. brug af VML og MathML. Den slags XML-sprog bør helt klart afvikles under XHTML, hvis de skal give mening på en webside.
På den anden side giver XHTML ikke bare en smule mening under ret mange forhold på dagens WWW.

    You're damned if you do - and you're damned if you don't!

Det betyder med andre ord, at hvis du vil bruge disse sprog på en webside, må du vælge, _hvordan_ du vil kode 'fjollet' - ikke _om_ du vil kode 'fjollet'  :o|
Avatar billede w13 Novice
02. marts 2008 - 13:48 #14
Inge point til mig, tak
Avatar billede hells Nybegynder
02. marts 2008 - 17:31 #15
ole, vil du ikke have dem efter al den indsigt, du har givet?
Avatar billede olebole Juniormester
02. marts 2008 - 17:40 #16
jooooh tak ... selvom tråden jo hurtig kom til at handle om noget helt andet end det, du spurgte om  :)
Avatar billede hells Nybegynder
02. marts 2008 - 17:47 #17
Ja, men ikke desto mindre lærerigt. Jeg siger tak.
Avatar billede olebole Juniormester
02. marts 2008 - 21:19 #18
Selvtak - og tak for points  :)
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