Avatar billede cool_casper Nybegynder
08. december 2008 - 00:38 Der er 4 kommentarer og
2 løsninger

AJAX: Læs XML fil

Hejsa.

Jeg går og pusler lidt med at lave et websystem der kan vise livescore. Min plan er at have et serverside administrationssystem som opdaterer en XML-fil på serveren. Klienterne skal så læse den XML-fil og behandle den via AJAX med et interval (f.eks. hvert 10 sek.) Dette gøres for at serveren skal blive belastet mindst muligt.
Men jeg har lidt problemer med at få selve kommandoerne til at læse XML'en til at virke. Jeg læst adskillige artikler og set videotutorials. Jeg er kommet frem til nedenstående kode, men får en fejl om at objektet ikke understøttes.
Hvad gør jeg galt?

XML:
<?xml version="1.0" encoding="utf-8"?>
<match>
    <set active=”false”>
        <home>25</home>
        <away>23</away>
    </set>
    <set active=”false”>
        <home>25</home>
        <away>23</away>
    </set>
    <set active=”false”>
        <home>23</home>
        <away>25</away>
    </set>
    <set active=”false”>
        <home>23</home>
        <away>25</away>
    </set>
    <set active=”true”>
        <home>6</home>
        <away>6</away>
    </set>
    <possession>home</possession>
</match>


java script:
function initAjax()
{
    var xhr;
    try
    {
        xhr = new XMLHttpRequest();
    } catch (error)
    {   
        try
        {
            xhr = new ActiveXObject('Microsoft.XMLHTTP');
        } catch (error)
        {
            xhr = null;
        }
    }
   
    if (xhr != null)
    {
            xhr.open('GET', 'xml/1.xml', true);
            xhr.onreadystatechange = function()
            {
                if (xhr.readyState == 4)
                {
                    if (xhr.status == 200 || xhr.status == 304)
                    {
                        updateData(xhr.responseXML);
                    }else{
                        alert('Fejl!');
                    }
                }
            };
           
            xhr.send(null);
    }else{
        alert('Fejl!');   
    }
   
}

function updateData(data)
{
    var sets = data.getElementsByTagName('set');
    alert(data.getElementsByTagName('home')[0].childNodes[0].nodeValue); //Får fejl på denne linie!
}
Avatar billede jokkejensen Novice
08. december 2008 - 09:04 #1
('home') findes jo ikke i dit xml ?

/J
Avatar billede jokkejensen Novice
08. december 2008 - 09:04 #2
sorry jo, men der er ingen childnodes.

/J
Avatar billede olebole Juniormester
08. december 2008 - 10:22 #3
<ole>

Det må vist være et andet dokument, du taler om jokke. Der er da i allerhøjeste grad en childNode i 'home' ... en tekstnode med værdien 25  =)

cool_casper >> Jeg gætter på, XML-dokumentet er et dynamisk dokument - formodentlig skrevet i PHP. Hvis det er tilfældet, serves det med overvejende sandsynlighed som 'text/html', hvilket ikke virker.

Du skal sætte en korrekt Content-Type header - så vil det uden tvivl køre for dig:

<?php
header("Content-Type: text/xml; charset=utf-8");
print "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
... osv ...
?>

/mvh
</bole>
Avatar billede olebole Juniormester
08. december 2008 - 10:23 #4
- og så kik her for en væsentligt bedre og opdateret XMLHttpRequest-wrapper:
    http://www.dengodekode.dk/artikler/ajax/xmlhttprequest_wrapper.php
Avatar billede cool_casper Nybegynder
10. december 2008 - 23:33 #5
Hej begge.

Så fik jeg løst problemet. Det viste sig at mine "-tegn i XML var af en anden type (”), selvom det er svært at se forskel. Det gav en syntaks-fejl i XML-filen og jeg kunne derfor ikke læse data. Min kode var sådan set rigtig nok.
Jeg takker dog for tips og en opdatere XHR-wrapper, Ole! Smid svar så får du lidt point.. :)
Avatar billede olebole Juniormester
11. december 2008 - 10:06 #6
Kommer her  ;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

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