Avatar billede tblaster Nybegynder
25. august 2007 - 16:26 Der er 20 kommentarer og
1 løsning

XMLDOM og XMLHttpRequest

Jeg forsøger at henten en værdi fra en xml fil via javascript. Det går ganske fint i Internet Explorer men i Firefox hænger browseren hver gang den skal køre koden og jeg får følgende besked:

"Et script på denne side er muligvis optaget, eller svarer ikke længere. Du kan standse scriptet nu, eller lade det fortsætte, for at se om scriptet afslutter."

Vælger jeg "Fortsæt scriptet" så afslutter scriptet med det samme og jeg får defineret min "FilUrl".

Hvis jeg erstatter følgende linie:
while (xmlhttp.readyState != 4) {}
Med:
alert("Test");
Så kørere mit script også fint og så snart man har lukket alerten køres scriptet færdigt og browseren hænger derfor ikke.

Jeg håber derfor der er nogen der kan hjælpe med at få scriptet til at køre perfekt i firefox. Jeg skal som sagt have en løsning der virker lige så godt som i IE hvor jeg kan hente enten teksten i xml filen eller blot et tag i dokumentet. Det er også helt fint med en anden løsning end den jeg har lavet men den skal virke 100% i Firefox.

På forhånd tak.


[Code]
if (window.ActiveXObject) {
    var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.async="false";       
    xmlDoc.load(url+'&IE=true');
    while (xmlDoc.readyState != 4) {}
    var FilUrl = xmlDoc.getElementsByTagName("Url").item(0).text;
}
else {
    var xmlhttp=new XMLHttpRequest()
    xmlhttp.open("GET",url,true);
    xmlhttp.send(null);
    while (xmlhttp.readyState != 4) {}
    FilUrl = xmlhttp.responseText;   
}
[/Code]
Avatar billede olebole Juniormester
25. august 2007 - 16:35 #1
<ole>

IE understøtter først XMLHttpRequest fra og med version 7.0. Betyder det, at du kun tester i dén (og scriptet defor også kun fejler dér)?

/mvh
</bole>
Avatar billede olebole Juniormester
25. august 2007 - 16:37 #2
Prøv:

else {
    var xmlhttp=new XMLHttpRequest()
    xmlhttp.open("GET",url,true);
    xmlhttp.send(null);
    if(xmlhttp.readyState == 4) {
        FilUrl = xmlhttp.responseText;
    }   
}
Avatar billede olebole Juniormester
25. august 2007 - 16:43 #3
Undskyld, glem den kommentar - men hvad er det egentlig, du vil lave? Hvorfor bruger du XMLDOM i IE og XMLHttpRequest i andre? Det er to helt forskellige objekter, der kan helt forskellige ting  =)
Avatar billede tblaster Nybegynder
25. august 2007 - 18:12 #4
Det jeg ønsker er, at kunne hente en url (dvs. bare noget tekst) fra en ekstern xml fil via javascript og bruge det i min kode.

Jeg bruger 2 forskellige komponenter, da jeg startede med at lave det med XMLDOM og så gik det op for mig at det ikke virkede i FF. Derfor lavede jeg en løsning til Firefox med XMLHttpRequest.

Og ved ikke om det var din første kommentar jeg skulle glemme, men ellers så ja, jeg tester XMLDOM i IE 7.0 og XMLHttpRequest i FF 2.0.
Avatar billede olebole Juniormester
25. august 2007 - 18:47 #5
Okay, så kan du - forudsat, xml-dokumentet ligger under samme domæne - skrive:

function getHttpObj(sUrl) {
    var xmlhttp = o = s = a = null;
    if (window.XMLHttpRequest) xmlhttp = new XMLHttpRequest();
    else if (window.ActiveXObject) {
        a = ["MSXML2.XMLHTTP.5.0","MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP"];
        for (var i=0,j=a.length; i<j; s=a[i],i++) {
            try{
                if (o = new ActiveXObject(s)) break
            }
            catch(e){}
        }
    }
    xmlhttp.open("GET", sUrl, true);
    xmlhttp.onreadystatechange = function() {
        responseCallBack(xmlhttp);
    };
    xmlhttp.send(null);
}
function responseCallBack(xmlhttp) {
    if (xmlhttp.readyState != 4) return;
    FilUrl = xmlhttp.responseText;
    xmlhttp = null;
}

getHttpObj("test.xml");
Avatar billede olebole Juniormester
25. august 2007 - 18:51 #6
Ups ... der var jeg lidt hurtig  :)

function getHttpObj(sUrl) {
    var xmlhttp = a = null;
    if (window.XMLHttpRequest) xmlhttp = new XMLHttpRequest();
    else if (window.ActiveXObject) {
        a = ["MSXML2.XMLHTTP.5.0","MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP"];
        for (var i=0,j=a.length; i<j; s=a[i],i++) {
            try{
                if (xmlhttp = new ActiveXObject(s)) break
            }
            catch(e){}
        }
    }
    xmlhttp.open("GET", sUrl, true);
    xmlhttp.onreadystatechange = function() {
        responseCallBack(xmlhttp);
    };
    xmlhttp.send(null);
}
Avatar billede olebole Juniormester
25. august 2007 - 18:53 #7
- og du bør jo nok skrive:
    if (!xmlhttp) return alert("Din browser understøtter ikke XMLHttpRequests");
    xmlhttp.open("GET", sUrl, true);
Avatar billede tblaster Nybegynder
25. august 2007 - 19:45 #8
Det virker fint i IE men i FF får jeg en tom FilUrl.
Avatar billede olebole Juniormester
25. august 2007 - 19:48 #9
Så må du lave en fejl et andet sted. Prøv at lægge et link til siden eller et tilsvarende eksempel
Avatar billede olebole Juniormester
25. august 2007 - 19:51 #10
Hvad sker der mon, hvis du kalder XML-dokumentet direkte i FF?
Avatar billede tblaster Nybegynder
25. august 2007 - 21:48 #11
Fandt mit problem. responseCallBack() nåede ikke at blive kørt inden min næste kode. Så jeg flyttede bare denne kode op under funktionen og nu virker det som det skal!

Mange tak for hjælpen. Smid et svar og du skal få point!
Avatar billede olebole Juniormester
25. august 2007 - 22:19 #12
Selvtak  :)
Avatar billede olebole Juniormester
26. august 2007 - 14:38 #13
- og tak for points  ;o)
Avatar billede ngr Praktikant
22. juli 2012 - 14:03 #14
Jeg har det samme problem, men jeg fatter intet af det, I skriver. Så jeg vil bare høre, hvad der er bedst at svare.
Avatar billede olebole Juniormester
22. juli 2012 - 15:43 #15
?
Avatar billede ngr Praktikant
22. juli 2012 - 19:40 #16
til det her:
"Et script på denne side er muligvis optaget, eller svarer ikke længere. Du kan standse scriptet nu, eller lade det fortsætte, for at se om scriptet afslutter."
Avatar billede olebole Juniormester
22. juli 2012 - 21:45 #17
Jeg forstår ordene, du skriver - men ikke hvad du tænker eller spørger om
Avatar billede ngr Praktikant
22. juli 2012 - 22:09 #18
ok
Avatar billede olebole Juniormester
22. juli 2012 - 23:50 #19
Gad vide, hvad det er, du sidder og ryger?  :D
Avatar billede ngr Praktikant
23. juli 2012 - 00:40 #20
Jeg synes,det er mere interessant at høre, hvad du ryger - eller drikker - hvis du ikke kan forstå, at jeg gerne vil have et råd til, om jeg skal give maskinen ordre på at standse scriptet nu - eller at lade det fortsætte - når jeg får denne besked op på skærmen:

"Et script på denne side er muligvis optaget, eller svarer ikke længere. Du kan standse scriptet nu, eller lade det fortsætte, for at se om scriptet afslutter."

Er det virkelig så svært?
Avatar billede olebole Juniormester
23. juli 2012 - 10:40 #21
Jeg ryger Camel uden filter og drikker kaffe, og det gør mig desværre ikke spor clairvoyant. At gætte, hvad du tænker, når du ikke gider bruge ord, der derfor ganske vanskeligt  =)

Når først du får sådan en besked, er der sjældent andet at gøre, end at lukke browseren - evt. via taskmanager'en. Løsningen er at finde ud af, hvad der er skyld i beskeden og fremover forsøge at undgå, at den situation opstår.
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