Permalänk
Medlem

Javascript hjälp

Hej. Håller på och leker med javascript xml och httpRequest..

Har ett script som hämtar ett antal nodlistor från ett xml dokument.
Jag har en global array som håller reda på listorna.

Det roliga är att i IE så fungarar det som det ska. Men I Firefox så fungerar det som det ska i typ 5 sekunder.

Har gjort en setTimout som skriver ut längden på en av nodlistorna på sidan, och den skriver ut rätt längd i ca 5 sekunder.. sen blir längden 0.
I IE så skriver den ut rätt längd hela tiden.

Har kommenterat ut all annan kod så det bode inte vara nånting som nollställer nodlistan.

Nån som har en aning om vad felet kan vara? Får inga felmedelande från javascript-konsollen.

Vet ej om det är ok att klistra in koden här..
Om någon vill se koden så säg till så klistrar jag in den här.

Permalänk
Medlem

Det är okej att du klistrar in koden här.
Klistra in koden inom

[code.][/code.]

Utan punkterna förstås

Visa signatur

Samsung TFT 22" 2233RZ Svart 120HZ - 640GB Western Digital Black 64MB SATA III - Corsair 4GB (2x2048MB) 1333MHz XMS3-10600 - AMD Phenom2 X4 965 3,4GHz Black Edition - Gigabyte GeForce GTX 460 1GB OC - Fractal Design Define R3, Svart - Corsair TX 650W 80+ - Gigabyte GA-870A-UD3 - Cooler Master Hyper 212 Plus

Permalänk
Medlem

Okej här är koden..

Script.js

//Variabler var xmldoc = null; //Variable to hold a xml document var objSubMenu = new Array(); // Array that holds all submenus var lang = "eng"; //Variable to decide language function testa(){ document.getElementById("title").innerHTML=objSubMenu["Commnity"].length; setTimeout("testa()",100); } function CreateRequest() //Checks browser and returns a http_request { var http_req; if (navigator.appName=="Microsoft Internet Explorer") http_req = new ActiveXObject("Microsoft.XMLHTTP"); else http_req = new XMLHttpRequest; if(!http_req) alert("hmmm"); return http_req; } function CreateMenu () { var http_req = CreateRequest(); http_req.onreadystatechange= function temp() { if(http_req.readyState==4) { var xmlmenu=http_req.responseXML; var temp = null; var strMenu = ""; var id=0; temp = xmlmenu.documentElement.childNodes; //root var i = 0; while(temp.item(i)) { if(temp.item(i).nodeName=="area") { id++; y=0; while(temp.item(i).childNodes.item(y)) { switch(temp.item(i).childNodes.item(y).nodeName) { case lang: strMenu=strMenu+'<div class="area" onmouseout=\'mousecontroll--;setTimeout("CollapseSubMenu()",100);\' onmouseover=\'CreateSubMenu('+id+',"'+temp.item(i).childNodes.item(y).firstChild.nodeValue+'");\'>'+temp.item(i).childNodes.item(y).firstChild.nodeValue+'</div>'; objSubMenu[temp.item(i).childNodes.item(y).firstChild.nodeValue] = temp.item(i).childNodes; break; } y++; } } i++; } document.getElementById("menu").innerHTML=strMenu; setTimeout("testa()",100); } } http_req.open("GET","xml/menu.xml",true); http_req.send(null); }

index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> <link rel="stylesheet" type="text/css" href="style/main.css" /> <script src="include/script.js"></script> </head> <body onload="CreateMenu()"> <div id="title" name="title"><h2>Title</h2></div> <div id="menu" name="menu"></div> <div id="content" name="content"></div> <div id="submenu" name="submenu"></div> </body> </html>

Permalänk
Medlem

Din kod är lite jobbig att läsa. Du kanske skulle använda ett bibliotek som AjaxRequest till att börja med? Betydligt lättare att få översikt om man kan abstrahera till det.

Permalänk

Använd async=false på request:en istället och skippa "onreadystate" kontrollen...

Denna function torde fungera:

function getExternalContent(url) { if(document.all) { // IE version var xmlDoc = new ActiveXObject("Microsoft.XMLHTTP"); xmlDoc.Open("GET", url, false); xmlDoc.Send(); } else { // Mozilla/Netscrap 6+ version var xmlDoc = new XMLHttpRequest(); xmlDoc.open("GET", url, false); xmlDoc.send(null); } try { return xmlDoc.responseText; } catch(e) { alert("Error occurred:\n\n" + e.number + " " + e.description); } }

responseText eller responseXML är upp till dig... responseText ger dig alltid ett svar, även om det är icke validerad XML som kommer tillbaka.

/Anders

Visa signatur

**************************
Om det fungerar för bra, installera om det...