... hvor jeg tjekker om <title>-tag'et findes i xml-filen (som fx kunne se sådan ud http://razmuz.dk/vol5/rpc.php?action=start), laver Firefox fejl: "response has no properties". Den virker fint i IE.
Hvad bør/skal jeg skrive hvis jeg vil tjekke om <title>-tag'et findes i xml-filen (response) således at det virker i begge browsere? Det må da kunne gøres uden at lave et browsertjek.
Herudover modtager jeg meget gerne generelle kommentarer til min brug af "AJAX". Jeg er helt ny i det, og vil derfor gerne lære hvordan "man normalt gør" :)
Husker du at sætte den korrekte MIME? Header("Content-Type: text/javascript");
Der er ikke nogen korrekt måde at bruge 'Ajax' på - da der ikke findes en standardiseret teknologi, der hedder sådan. 'Ajax' er blot et ord, der er klistret på en samling af bestående teknologier, der ofte bruges sammen. Selv har jeg således brugt 'Ajax' siden slutningen af 1999 ... længe før, der var noget, man kaldte 'Ajax'
I øvrigt er dit XML-dokument ekstremt længe om at blive genereret. Noget kunne tyde på, det enten ligger på en meget langsom/overbelastet server - eller at du bruger et dårligt performende XML-lag :)
Tak for svaret. Jeps jeg var godt klar over det du siger med Ajax, men jeg tænkte bare, at der var nogle metoder der var mere roste/kritiserede end andre.
Hvor er det lige du ønsker at jeg sætter MIME-typen? I min jscript.js? - Mener du at jeg skal omdæbe den til jscript.php og sætter <?php Header("Content-Type: text/javascript"); ?> i toppen af filen? :)
Og hensyn til min xml-fil - jeg tror bare det er fordi den ligger på en over-crowded b-one-server *tsk* må hellere se at få den flyttet.
Hvad mener du med "XML-lag"? :)
Jeg "danner" min XML således i min rpc.php (igen - det er helt "hjemmeskrevet" og jeg aner overhovedet ikke om det er gjort på den mest hensigtsmæssige måde) således: <?php function scan_array($data) { global $level, $output; foreach($data as $key => $value) { for($i=0; $level>$i; $i++) $output .= " "; $output .= "<".$key.">"; if(is_array($value)) { $output .= "\n"; $level++; scan_array($value); $level--; for($i=0; $level>$i; $i++) $output .= " "; } else { $output .= $value; } $output .= "</".$key.">\n"; } }
Ja, du skal sætte header'en helt øverst ... lige efter '<?php', så du er sikker på, du ikke har output'et noget før header'en bliver sat.
Der er noget indbygget XML-håndtering i PHP, du kan bruge, hvilket uden tvivl er hurtigere. Når jeg selv laver 'Ajax'-agtige applikationer bruger jeg næsten aldrig XML - men ren JS, som jeg finder en hel del hurtigere - og mindre CPU-, RAM- og trafik-krævende. Metoden holder jeg dog ret tæt til kroppen ... man skal jo også leve ;o)
Hehe jeps okay - jeg brugte også "ren js" før jeg skiftede til det nuværende - men jeg tænkte at det ville være lidt sejt, at alle ens sider findes i "rigtig xml" sådan at de kan bruges af andre applikationer.
... men jeg VED du også kender svaret på mit oprindelige spørgsmål, så hvad skal jeg rette denne linje til
if(response.getElementsByTagName("title")[0]) {
jævnfør forklaringen i toppen... tak! :)
Lige et tillægsspørgsmål: hvorfor er det nødvendigt at deklarere MIME-typen når den nu hedder *.js? :) Det ser da ud til at virke alligevel? :)
Jamen, den hedder da ikke .js - den hedder jo: 'http://razmuz.dk/vol5/rpc.php'. Din XML-fil er en .php-fil ... derfor skal du sætte MIME ;o) Prøv nu lige at forklare browseren, det er en XML-fil, der er tale om ... så virker det sikkert også i FF ;o)
Nej det virker stadig ikke. Den kan slet ikke alert'e dem. Firefox siger: Error: response has no properties Source File: http://razmuz.dk/vol5/inc/jscript.js Line: 30
Du tester vel forhåbentlig under samme domæne, som XML-filen ligger under? Det virker ikke i FF, hvis f.eks. testfilen ligger lokalt - og XML-filen på en server.
Der er mange grunde til, jeg ikke bruger XML til Ajax-applikationer ;o)
Hos mig siger FF, at der er et root-element - og at det har 5 childnodes :) Luk FF og start en ny browser-session. Det kan være FF har cached dokumentet
Jaja det ved jeg godt! - og det er derfor jeg laver "tjekket" i min js-fil. Hvis ikke <title> findes i response så skal den køre changePage('error'); - altså den skal vise en fejl side FORDI http://razmuz.dk/vol5/rpc.php?action=kontakt er "ikke gyldig" (den er tom).
if(response.getElementsByTagName("title")[0]) { // vis side } else { changePage("error"); }
Jamen, den fejler naturligvis, fordi 'arrayet' response.getElementsByTagName("title") længde er 0 ;o)
Hvis der er fare for at loade et tomt dokument, kunne du spørge med: if (response.getElementsByTagName("title").length>0) alert("der er en titel") else alert("der er ikke en titel")
Du kan også prøve at spørge på status-property'en - prøv f.eks:
function handleResponse() { alert(http.status) ...osv ... osv ...
Det er jo fordi, du giver den et helt tomt 'XML-dokument' - og sætter du overhovedet XML-header'en? Det virker ikke sådan - og så skal det jo gå galt :)
Din server er formodentlig sat op til at serve alle PHP-dokumenter med MIME: 'text/html'. Derfor nytter det ikke noget at pakke headren ind i en betingelse. Den skal _altid_ sættes. Ellers er der ingen klienter, der genkender dokumentet som et XML-dok.
Desuden består et validt XML-dokument altid af mindst en prolog og et dokument-, eller root-element :)
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.