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
<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
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
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
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
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
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
- 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
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
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
Hvad sker der mon, hvis du kalder XML-dokumentet direkte i FF?
Skrevet lør. d. 25. august 2007 kl. 21:48:25| #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!
Skrevet lør. d. 25. august 2007 kl. 22:19:00| #12
Skrevet søn. d. 26. august 2007 kl. 14:38:10| #13
Skrevet søn. d. 22. juli 2012 kl. 14:03:00| #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.
Skrevet søn. d. 22. juli 2012 kl. 15:43:16| #15
Skrevet søn. d. 22. juli 2012 kl. 19:40:16| #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."
Skrevet søn. d. 22. juli 2012 kl. 21:45:40| #17
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
Gad vide, hvad det er, du sidder og ryger? :D
Skrevet man. d. 23. juli 2012 kl. 00:40:28| #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?
Skrevet man. d. 23. juli 2012 kl. 10:40:29| #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.