Avatar billede donkazz Nybegynder
02. januar 2008 - 10:13 Der 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;
               
                http_request.onreadystatechange = function()
                {
                    if (http_request.readyState == 4)
                    {
                        if (http_request.status == 200)
                        {
                            document.getElementById("calDayView").innerHTML = http_request.responseText;
                        }
                        else
                        {
                            alert(http_request.responseText);
                        }
                    }
                }
           
                http_request.open('POST', strURL, true);
                http_request.send(null);
            }
Avatar billede donkazz Nybegynder
02. januar 2008 - 13:11 #1
fandt selv ud af det :)

http_request.open("GET", strURL, false);
Avatar billede w13 Novice
02. januar 2008 - 14:21 #2
POST er dog meget mere sikkert at bruge. ;)
Avatar billede donkazz Nybegynder
02. januar 2008 - 14:42 #3
Det er jeg slet ikke i tvivl om, men det er til internt brug og der er ingen hemmeligheder, så det går nok. ;-)

*HOST* Max Power *HOST*
Avatar billede olebole Juniormester
02. januar 2008 - 15:17 #4
<ole>

Eksternt eller internt er uden den store betydning. Bruger du POST, slipper du i hvertfald udenom én af IE's mange kilder til memory-leaks  ;o)

- og som så mange gange før skal jeg da lige nævne, at brug af innerHTML ikke hænger sammen med Ajax eller anden moderne webkode

/mvh
</bole>
Avatar billede donkazz Nybegynder
02. januar 2008 - 15:36 #5
Hvaba! Hvad i al verden skal jeg så gøre for at få teksten ned på siden? :-O
Avatar billede w13 Novice
02. januar 2008 - 18:15 #6
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".
Avatar billede donkazz Nybegynder
02. januar 2008 - 19:20 #7
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? :)
Avatar billede w13 Novice
02. januar 2008 - 19:52 #8
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. =)
Avatar billede donkazz Nybegynder
02. januar 2008 - 20:29 #9
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?
Avatar billede w13 Novice
02. januar 2008 - 20:31 #10
Jeg ved ikke helt, hvordan de bruger Ajax, men de bruger i hvert fald ikke innerHTML. =)

Og brugeren Olebole plejer at rose deres Ajax-programmering til skyerne.

Du har helt ret i, at man skal opbygge tabellen manuelt med Document Object Model som beskrevet oven for, ja. =)
Avatar billede w13 Novice
02. januar 2008 - 20:34 #11
Nu har jeg aldrig brug GMail, men hvorfor tror du, de har brugt det forkert?
Avatar billede donkazz Nybegynder
03. januar 2008 - 12:27 #12
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?
Avatar billede w13 Novice
03. januar 2008 - 12:39 #13
Ja, hvis man bare gør det hensigtsmæssigt, så kan man sagtens. Altså alt med måde selvfølgelig. =)
Avatar billede donkazz Nybegynder
03. januar 2008 - 12:46 #14
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. :)
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