Oprettet lør. d. 25. august 2007 kl. 16:26:40

tblaster
tblaster (10.215 point. Point ude: 100)

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]

Skrevet lør. d. 25. august 2007 kl. 16:35:05| #1

olebole
olebole (216.718 point)
<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>

Skrevet lør. d. 25. august 2007 kl. 16:37:55| #2

olebole
olebole (216.718 point)
Prøv:

else {
    var xmlhttp=new XMLHttpRequest()
    xmlhttp.open("GET",url,true);
    xmlhttp.send(null);
    if(xmlhttp.readyState == 4) {
        FilUrl = xmlhttp.responseText;
    }   
}

Skrevet lør. d. 25. august 2007 kl. 16:43:30| #3

olebole
olebole (216.718 point)
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  =)

Skrevet lør. d. 25. august 2007 kl. 18:12:20| #4

tblaster
tblaster (10.215 point)
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.

Skrevet lør. d. 25. august 2007 kl. 18:47:35| #5

olebole
olebole (216.718 point)
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");

Skrevet lør. d. 25. august 2007 kl. 18:51:03| #6

olebole
olebole (216.718 point)
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);
}

Skrevet lør. d. 25. august 2007 kl. 18:53:15| #7

olebole
olebole (216.718 point)
- og du bør jo nok skrive:
    if (!xmlhttp) return alert("Din browser understøtter ikke XMLHttpRequests");
    xmlhttp.open("GET", sUrl, true);

Skrevet lør. d. 25. august 2007 kl. 19:45:50| #8

tblaster
tblaster (10.215 point)
Det virker fint i IE men i FF får jeg en tom FilUrl.

Skrevet lør. d. 25. august 2007 kl. 19:48:50| #9

olebole
olebole (216.718 point)
Så må du lave en fejl et andet sted. Prøv at lægge et link til siden eller et tilsvarende eksempel

Skrevet lør. d. 25. august 2007 kl. 19:51:58| #10

olebole
olebole (216.718 point)
Hvad sker der mon, hvis du kalder XML-dokumentet direkte i FF?

Skrevet lør. d. 25. august 2007 kl. 21:48:25| #11

tblaster
tblaster (10.215 point)
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!

Skrevet lør. d. 25. august 2007 kl. 22:19:00| #12

olebole
olebole (216.718 point)
Selvtak  :)

Skrevet søn. d. 26. august 2007 kl. 14:38:10| #13

olebole
olebole (216.718 point)
- og tak for points  ;o)

Skrevet søn. d. 22. juli 2012 kl. 14:03:00| #14

ngr
ngr (7.170 point)
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.

Skrevet søn. d. 22. juli 2012 kl. 15:43:16| #15


Skrevet søn. d. 22. juli 2012 kl. 19:40:16| #16

ngr
ngr (7.170 point)
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."

Skrevet søn. d. 22. juli 2012 kl. 21:45:40| #17

olebole
olebole (216.718 point)
Jeg forstår ordene, du skriver - men ikke hvad du tænker eller spørger om

Skrevet søn. d. 22. juli 2012 kl. 22:09:22| #18


Skrevet søn. d. 22. juli 2012 kl. 23:50:34| #19

olebole
olebole (216.718 point)
Gad vide, hvad det er, du sidder og ryger?  :D

Skrevet man. d. 23. juli 2012 kl. 00:40:28| #20

ngr
ngr (7.170 point)
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?

Skrevet man. d. 23. juli 2012 kl. 10:40:29| #21

olebole
olebole (216.718 point)
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.

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   


Seneste spørgsmål

Første ID er tom ?

Oprettet den 11. maj 2013 kl. 11.54
ingeman giver 200 point for svar | Giv et svar »

alert box frem hvis der intet indhold er på siden

Oprettet den 8. maj 2013 kl. 19.43
tobrukDk giver 60 point for svar | Giv et svar »

Enter som TAB

Oprettet den 8. maj 2013 kl. 14.21
MolleBarb giver 30 point for svar | Giv et svar »








Tips & Tricks fra PC World

Teaser billede

Her er seks Google Labs-funktioner, som du skal slå til med det samme

Gmail Labs giver dig adgang til en masse smarte funktioner, som Googles ingeniører leger med i øjeblikket.


Anmeldelser fra PC World

Teaser billede

Test: Samsung Galaxy S4 er et hit - trods gøglertricks

Kan Samsung beholde førertrøjen i det store Android-race? Galaxy S4 er smækfyldt med innovative funktioner, men også med en del gøgl. Er det for meget? Få vores dom over Samsungs nye topmodel.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Tre smarte trick som gør Windows 8 bedre

Boot direkte til skrivebordet, få en strategisk godt placeret luk-knap og slip for at logge ind. Her er tre tips til Windows 8, som gør det nemmere at blive venner med styresystemet.


Nyheder fra Computerworld

Teaser billede

Galleri: Her er Googles nyeste værktøj og legetøj

Google har i denne uge afholdt udviklerkonferencen I/O i San Francisco. Se her hvad søgegiganten kunne præsentere af nyskabelser.


IT Kurser
Samarbejdspartnere

Udgiver · © 2013 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger