02. januar 2008 - 10:13Der er
13 kommentarer og 1 løsning
Ajax, flere div's loading problem
Hejsa!
Jeg har ca. 3 div's der skal loade 3 forskellige sider ind i sig med hjælp fra Ajax. Jeg har pastet den ene loader funktion ind her nederst, og dem er der så 3 af, som alle 3 bliver kaldt fra en init() funktion. Problemet er at det som regel kun er den sidste der fungerer, som om at den ligesom stopper de 2 første fra at loade... ? :-(
Jeg mener jeg fandt noget engang der forklarede hvordan man slap for det problem, men det kan jeg jo ikke finde igen har jeg måtte indse...
Funktion 3: function load_dayView(vDate,vEventId) { http_request = getXMLHTTP();
// Kontrollerer XML paa klienten if (!http_request){ alert(NoXMLHTTP); return false; }
var strURL = "/menuer/kalender/ajax/dayView.asp?vDate="+vDate+"&vEventId="+vEventId;
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Det korrekte alternativ er DOM (Document Object Model).
F.eks.:
var newElement=document.createElement("img"); newElement.setAttribute("src",http_request.responseText); document.getElementById("container").appendChild(newElement);
Her oprettes et img-element i variablen newElement, dernæst sættes billedets src (som hentes med Ajax) og til sidst tilføjes (appendes) billedet til "container".
Hmmm... jamen hvad så hvis ens responseText er en tabel fyldt med tekst? Det er måske ikke meningen man skal bruge Ajax til så store ting? How teh hell gør Google så?
Jeg er frisk på at oprette et bonusspørgsmål så du / I kan få point for at besvare alle de her spørgsmål? :)
Jo, ser du, egentlig er Ajax slet ikke beregnet til at modtage i form af HTML eller tekst. Som navnet (Asyncronous Javascript And Xml) antyder, så er det meningen, at man skal modtage data som XML.
Det kunne se således ud, hvis vi nu siger, vi har dokumentet data.asp: ------------------------------------------ <%Response.ContentType="text/xml"%><?xml version="1.0" encoding="iso-8859-1" ?> <data xml:lang="da"> <output> <text id="frugt">Æble</text> </output> </data> ------------------------------------------ Her bruger jeg ASP til at lave et XML-dokument med. Fordi jeg sætter ContentType til text/xml, bliver det fortolket som XML, men eftersom dokumentet hedder .asp, så kan jeg hente alt muligt fra en database og lign.
Og så kan javascript'et modtage det således: ---------------------------------------------- alert(req.responseXML.getElementsByTagName("output")[0].firstChild.firstChild.nodeValue); ---------------------------------------------- Her vil der blive alert'et "Æble". I stedet for alert kunne vi bygge en table (hvis det var det, vi ville) og indsætte "Æble" det korrekte sted.
Mange bruger stadigvæk innerHTML, fordi det umiddelbart er lettere, men uanset hvordan man vender og drejer det, så er det ikke korrekt JavaScript og kan medføre en hel del fejl. F.eks. sløver det IE i længden. XML bliver også hentet hurtigere i øvrigt.
Flere fordele kan dog opnås ved at bruge JSON (JavaScript Object Notation) i stedet for XML, men det behøver vi ikke at gennemgå nu. XML er helt fint til formålet. =)
Aaaah jeg tror faktisk jeg nåede at få skimmet noget lignende i min jagt på en løsning på det oprindelige spørgsmål.. Var der ikke noget med at man skulle bruge ovenstående til at opbygge en tabel, hvis det var det man skulle?
Men tager jeg så helt fejl hvis jeg siger at Googles Gmail bruger Ajax forkert? eller har de bare gjort det snedigt?
Jamen egentligt mest fordi at når man åbner en mail, så er der jo en forfærdeligt masse tekst der skal hentes, men det er måske okay at hente en masse tekst fra XML, så længe det ikke indeholder HTML oder was?
Ja det udtryk har jeg vist hørt før, men du ved... :) Tak for hjælpen, jeg prøver at starte forfra og så med XML in mente. :)
Synes godt om
Ny brugerNybegynder
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.