Avatar billede Slettet bruger
29. maj 2006 - 11:10 Der er 42 kommentarer og
2 løsninger

IE fejler parsing af XML

Jeg har på http://cykeltjek.notenet.dk lavet et lille AJAX-eksempel, hvor man ved at ændre på "producent", får en række mærker fra databasen over i den næste <select>. Det virker som det skal i Firefox, men i IE får jeg bare en tom liste - ingen javascript fejl, heller.

Ved i hvad fejlen kan være? Mit XML kan se sådan ud:
  <?xml version="1.0" encoding="ISO-8859-1" ?>
- <optionsList>
  <option id="0" name="Alle" />
  <option id="7" name="BMX" />
  <option id="5" name="Road" />
  <option id="6" name="Shopper" />
  </optionsList>

Mens mit javascript ser sådan ud:

function changeBikeModels(xmlFile) {
    var myEl = document.searchForm.bikeModel;
   
    var allOptions = new Array();
   
    for(i=0;i<xmlFile.getElementsByTagName('option').length;i++) {
        allOptions[xmlFile.getElementsByTagName('option')[i].getAttribute("id")] = xmlFile.getElementsByTagName('option')[i].getAttribute("name");       
    }
   
    createOpts(myEl, allOptions);
}
Avatar billede olebole Juniormester
29. maj 2006 - 11:37 #1
<ole>

Prøv nogen alerts og se, hvad det er, der sker ... og hvor  :)

/mvh
</bole>
Avatar billede olebole Juniormester
29. maj 2006 - 11:45 #2
Brug en alm. for-løkke i funktionen createOpts ... ikke en for/in-løkke.

Skriv også din løkke i spørgsmåls-eksemplet sådan:

    var opt;
    for(i=0;i<xmlFile.getElementsByTagName('option').length;i++) {
        opt = xmlFile.getElementsByTagName('option')[i];
        allOptions[parseInt(opt.getAttribute("id"))] = opt.getAttribute("name");       
    }

- så tror jeg, det vil virke  :)
Avatar billede olebole Juniormester
29. maj 2006 - 11:45 #3
Jeg er på vej udaf døren, så hvis ikke jeg svarer, er det derfor. Jeg kan kikke på det senere på dagen
Avatar billede Slettet bruger
29. maj 2006 - 12:07 #4
Jeg har alertet xmlFile.getElementsByTagName('option')[0].getAttribute("id"), hvor jeg får at vide, at der ikke er noget objekt e.l.. Hvis jeg alerter xmlFile får jeg [object], mens jeg i Firefox får noget [object xml ... ]. Hvilket vel betyder, at det kan være en fejl i mit "parser"-script?
Avatar billede Slettet bruger
29. maj 2006 - 12:09 #5
Ved at ændre det til dit forslag, virker det på samme måde nøjagtigt - IE giver mig bare en blank <select>, mens Firefox smider de korrekte værdier deri.
Avatar billede Slettet bruger
29. maj 2006 - 12:17 #6
Hvis jeg skriver:

alert(http_request.responseXML.childNodes.length);

lige før jeg returnerer mit xml-objekt, får jeg "1" tilbage i Firefox, og "0" i IE, hvilket vel betyder, at xml-dokumentet slet ikke bliver leveret rigtigt i IE?
Avatar billede mclemens Nybegynder
29. maj 2006 - 13:23 #7
Ved ikke om det har betydning...
Siden leveres som: text/html - Ved ikke om det hjælper ved levering som text/xml...
<?php header("Content-type: text/xml"); ?>

... Jeg skal nok have leget lidt med det i aften (kan heller ikke forstå den ikke virker) - har også testet lidt lokalt og når til samme resultat som dig: XML objectet bliver ikke loadet ... indholdet er dog loadet hvis man bruger responseText - så det tyder på at IE har lidt problemer med parsing af filen. Tror (måske) det er problemet med content type - da det burde virke iflg.: http://developer.mozilla.org/en/docs/AJAX:Getting_Started :/
Avatar billede Slettet bruger
29. maj 2006 - 13:31 #8
min xml-side er vel xml. ?
Avatar billede Slettet bruger
29. maj 2006 - 13:31 #9
<?xml version="1.0" encoding="ISO-8859-1" ?>
- <optionsList>
  <option id="0" name="Alle" />
  <option id="7" name="BMX" />
  <option id="5" name="Road" />
  <option id="6" name="Shopper" />
  </optionsList>

Det er det eneste indhold på siden. Ingen andre headers e.l. bliver udsendt.
Avatar billede mclemens Nybegynder
29. maj 2006 - 14:12 #10
http://www.seoconsultants.com/tools/headers.asp
... kontrol på http://cykeltjek.notenet.dk/fetchData/?toFind=bikeModels&selected=2

Giver:

SEO Consultants Directory Check Server Headers - Single URI Results

Server Response: http://cykeltjek.notenet.dk/fetchData/?toFind=bikeModels&selected=2
HTTP Status Code: HTTP/1.1 200 OK
Date: Mon, 29 May 2006 12:08:20 GMT
Server: Apache/2.0.54 (Debian GNU/Linux) PHP/4.3.10-16 mod_ssl/2.0.54 OpenSSL/0.9.7e mod_perl/1.999.21 Perl/v5.8.4
X-Powered-By: PHP/4.3.10-16
Set-Cookie: PHPSESSID=9b898dde5950ceb494da14ee3322fade; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 216
Connection: close
Content-Type: text/html

^ - indholdet leveres som text/html ... men tror ikke det har betydning
... det var bare et forslag om at prøve at outputte en anden header ...
(selvom du ikke p.t. outputter en header - så gør serveren det automatisk ... den er dog forkert her - så om ikke andet bør du outputte en anden header med text/xml da det er mest korrekt)


(er også på vej ud af døren nu ... er først hjemme igen hen under aftenen...)
Avatar billede mclemens Nybegynder
29. maj 2006 - 14:14 #11
PHP:
<?php header("Content-type: text/xml"); ?>

ASP (ikke sikker på den da jeg ikke kender asp):
<% Response.ContentType = \"text/xml\"; %>
Avatar billede Slettet bruger
29. maj 2006 - 14:27 #12
Det skal desværre være en header, der kan udskrives som tekst (f.eks. <meta http-equiv="content-Type" content="text/html; charset=iso-8859-1">), da jeg bruger output buffering, der ikke kan lide php-headers.
Avatar billede mclemens Nybegynder
29. maj 2006 - 16:41 #13
... og det er ikke en header hvis det outputtes sådan ... så er det en meta oplysning om, hvad siden indeholder og hvilken encoding siden er formatteret i ... anyhow downloader det nu og leger herefter på lokal offline - server ...
Avatar billede mclemens Nybegynder
29. maj 2006 - 16:59 #14
Det hjalp med content type ændring :)
- skal jeg uploade en demo kopi af din test til et test sted?
... skal lige over på den anden så poster jeg lige den php fil der virkede :)
Avatar billede mclemens Nybegynder
29. maj 2006 - 17:00 #15
<?php header("Content-type:text/xml"); echo'<'.'?xml version="1.0" encoding="ISO-8859-1" ?'.'><optionsList><option id="0" name="Alle" /><option id="7" name="BMX" /><option id="5" name="Road" /><option id="6" name="Shopper" /></optionsList>'; ?>
Avatar billede mclemens Nybegynder
29. maj 2006 - 17:02 #16
- om der kan laves en meta definering der overruler header der er sendt fra serveren tvivler jeg lidt på ... men jeg leger lidt mere med det ... evt. kan du gøre så du requeste en statisk bike0-4.xml fil og indstiller apache så den sætter den rigtige content-type hvis den ikke gør det automatisk når fil navnet er .xml
Avatar billede mclemens Nybegynder
29. maj 2006 - 17:16 #17
uhm, det ser ikke ud til at man kan http://www.w3schools.com/xml/xml_server.asp ... dog er w3schools ikke altid det mest anbefalte site herinde... så pløjer videre ...
Avatar billede mclemens Nybegynder
29. maj 2006 - 17:25 #18
http://developer.mozilla.org/en/docs/AJAX:Getting_Started
^ Check Step 3 ud (læs Note 2 under eksemplet) ...
Avatar billede mclemens Nybegynder
29. maj 2006 - 17:35 #19
Så du skal have serveren til at outputte en header med
<?php header("Content-type: application/xml"); ?>
eller
<?php header("Content-type: text/xml"); ?>
eller
køre det som i 29/05-2006 17:02:52 - med .xml filer istedet med en evt. efterfølgende konfigurering af serveren

- det er den konklusion jeg er nået til ...
men lad os se om Olebole kan trylle ... :)
Avatar billede Slettet bruger
29. maj 2006 - 17:37 #20
Det håber jeg, at han kan! :D
Avatar billede olebole Juniormester
29. maj 2006 - 18:11 #21
Man sætter _altid_ en header i PHP, når dokumentet skal tolkes som XML. At FF tolker et 'text/html'-dokument som XML er en klar bug:
    <?php header("Content-Type: text/xml")?>
- evt. mere fuldstændig:
    <?php header("Content-Type: text/xml; charset=ISO-8859-1")?>
Avatar billede olebole Juniormester
29. maj 2006 - 18:19 #22
"da jeg bruger output buffering, der ikke kan lide php-headers."

1) Hvorfor output-buffering? Det burde der ikke være grund til - og det sluger server-RAM

2) Den mest almindelige årsag til, folk bruger OB, er tværtimod for at undgå 'header already sent' fejl

Bare skriv alle headers øverst i dokumentet, før du outputter så meget som et eneste tegn, så er der ingen problemer med HTTP-headers sat af PHP  :)
Avatar billede olebole Juniormester
29. maj 2006 - 18:20 #23
- og nej ... man kan ikke overskrive den af serveren satte MIME-type med en meta. Der er ingen vej uden om en HTTP-header i PHP  :)
Avatar billede Slettet bruger
29. maj 2006 - 18:43 #24
Mit problem er, at hvis jeg sætter en header med php før xml'et, bliver det åbenbart tolket som om, at hele hjemmesiden - inklusive "hovedsiden" er xml.
Avatar billede Slettet bruger
29. maj 2006 - 18:44 #25
Det handlede bare om, at jeg placerede den rigtigt. Det her har taget mig 5 timer at finde ud af, og så lå svaret lige foran mig :) Smid svar endnu engang tak, begge to.
Avatar billede mclemens Nybegynder
29. maj 2006 - 18:45 #26
ok :)
Avatar billede Slettet bruger
29. maj 2006 - 18:49 #27
Det er utroligt hvordan jeg kan springe så hurtigt over så indlysende fejl :|
Avatar billede mclemens Nybegynder
29. maj 2006 - 18:49 #28
- og det var så lidt :)

... rart nok at få bekræftet af Olebole også :)
- og så er det jo også rart, at jeg selv ved det...
( ... hvis jeg selv skal rode med det senere... )

Brug udgaven i 29/05-2006 18:11:46 istedet for en af dem
jeg kom med ... det er godt at have encoding med også :)
Avatar billede mclemens Nybegynder
29. maj 2006 - 18:50 #29
... jeg overså egentlig også Note 2 inde hos mozilla i første omgang ...
Avatar billede Slettet bruger
29. maj 2006 - 18:52 #30
Jeg bruger skam også den med encoding. Ellers bliver mine danske karakterer vist som spørgsmålstegn i Firefox. :)
Avatar billede mclemens Nybegynder
29. maj 2006 - 18:55 #31
Og det er også et eksempel på at FF xhtml/xml DOM er buggy ...
- Som Olebole plejer at fremhæve... så om scripts man laver til xhtml sider idag virker i IE når IE engang understøtter xhtml det er meget svært at være sikker på (hvis IE laver en ordentlig xhtml dom parser der ikke er buggy som FF's)
Avatar billede mclemens Nybegynder
29. maj 2006 - 18:55 #32
hehe, jeg prøvede at switche min encoding til UTF-8 en dag ... det tog lige 5 minutter så var den på igen (der var lidt for meget jeg skulle rette) :)
Avatar billede mclemens Nybegynder
29. maj 2006 - 18:56 #33
det tog lige 5 minutter så var den på (sat til iso-8859-1) igen
Avatar billede Slettet bruger
29. maj 2006 - 18:58 #34
Forståeligt :)
Avatar billede mclemens Nybegynder
29. maj 2006 - 22:12 #35
Opper lige tråden...
Ole C. , et svar :)
Avatar billede Slettet bruger
29. maj 2006 - 22:35 #36
Skal vi ikke lige give ham et døgn mere. :)

Hvis han ikke har svaret inden da, opretter jeg en ny tråd med points til olebole.
Avatar billede mclemens Nybegynder
29. maj 2006 - 22:37 #37
Vi giver Ole den tid - en Ole skal tage ;)
Forklarer lige hvorfor jeg oppede tråden:
Ole får nemlig ikke altid e-mails :)

(jeg er kan sommetider være væk i 2-5 dage selv)
Avatar billede mclemens Nybegynder
29. maj 2006 - 22:38 #38
(jeg (er <- fejl) kan ...
Avatar billede olebole Juniormester
30. maj 2006 - 06:41 #39
Hej guys. Godt, I fandt ud af det til sidst. Jeg havde en ret komprimeret dag igår, så derfor blev der ikke så megen tid til Jer  =)
Avatar billede Slettet bruger
30. maj 2006 - 07:03 #40
Perfekt. Så kommer der, endnu engang, nogle points i jeres retninger :)
Avatar billede olebole Juniormester
30. maj 2006 - 08:16 #41
Tusind tak. For en anden gangs skyld, behøver du ikke skrue pointantallet op for min skyld. 1 eller 100 points betyder ikke noget. Derimod er der 'obligatorisk bitcheri', når folk bare klapper et spm. i uden en lyd ... men det er jo noget _helt_ andet  ;o)
Avatar billede mclemens Nybegynder
30. maj 2006 - 08:44 #42
Tusind tak - også :)
Avatar billede Slettet bruger
30. maj 2006 - 13:34 #43
Selv tak. Jeg mener bestemt at alle deltagere, der har medvirket til at finde en løsning, skal have det antal points, der er udlovet, selvom dette med stor sandsynlighed ikke er meningen fra ekspertens side. :)
Avatar billede olebole Juniormester
30. maj 2006 - 21:06 #44
Hehe ... godt, så ... det er suverænt dit valg. Bare du ikke føler dig forpligtet, så er jeg mere end tilfreds  ;o)
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