Avatar billede karl-koder Nybegynder
19. april 2008 - 10:07 Der er 18 kommentarer og
1 løsning

createElement der driller lidt

Hejsa,

Jeg forsøger at lave en ul liste med resultatet fra en json output der ser sådan ud :

{"errorheader":"Der opstod en fejl:","errormessage":["1. Databasen findes ikke!","2. Tabellen findes ikke!","3. Record findes ikke!"]}

Og i min callback function forsøger jeg at lave følgende :

editRoleCallBack : function(oHttp){
    var respText = eval("(" + oHttp.responseText + ")");
    var errDiv = document.getElementById("errorMessage");
    errDiv.style.display = "block";
    var newSpan = document.createElement("span");
    newSpan.appendChild(document.createTextNode(respText.errorheader));
    var newUl = document.createElement("ul");
    for (var i = 0; i < respText.errormessage.length; i++){
        newUl.appendChild(document.createElement("li"));
        newUl.lastChild.appendChild(document.createTextNode(respText.errorheader[i]));
    }
}

Men det eneste der sker er at mit div vises men ikke den liste jeg forsøger at generere via DOM.

Når jeg tjekker response i FF så viser den fint det json output der ligger ovenfor, dog ser det ud til at browerseren ikke bliver færdig med at rendere siden.

Hvad gør jeg forkert her ?
Avatar billede erikjacobsen Ekspert
19. april 2008 - 10:14 #1
Kan det passe du mangler at lægge din newSpan i dit div, og din newUl i sin newSpan?
Avatar billede karl-koder Nybegynder
19. april 2008 - 11:09 #2
Ja det var da en god idé at appende dem til mit div og det hjalp mig da en del af vejen ;o)

Men hvorfor virker det som at siden ikke renderes færdig når jeg køre scriptet i FF ?
Avatar billede karl-koder Nybegynder
19. april 2008 - 11:12 #3
og det hjælper måske lidt hvis jeg illustrere det jeg forsøger at lave :

<div>
    <span>Fejl overskrift</span>
    <ul>
        <li>fejl 1</li>
        <li>fejl 2</li>
        <li>osv...</li>
    </ul>
</div>
Avatar billede softspot Forsker
19. april 2008 - 11:15 #4
Er det bare mig, eller skal denne linie 

newUl.lastChild.appendChild(document.createTextNode(respText.errorheader[i]));

ikke referere til errormessage i stedet for errorheader?

newUl.lastChild.appendChild(document.createTextNode(respText.errormessage[i]));
Avatar billede karl-koder Nybegynder
19. april 2008 - 11:27 #5
Jo den skal og den har jeg også rettet til, copy/paste bøf ;o)

Min kode ser nu sådan ud :

editRoleCallBack : function(oHttp){
    var respText = eval("(" + oHttp.responseText + ")");
    var errDiv = document.getElementById("errorMessage");
    errDiv.style.display = "block";
    var newSpan = document.createElement("span");
    newSpan.appendChild(document.createTextNode(respText.errorheader));
    errDiv.appendChild(newSpan);
    var newUl = document.createElement("ul");
    for (var i = 0; i < respText.errormessage.length; i++){
        newUl.appendChild(document.createElement("li"));
        newUl.lastChild.appendChild(document.createTextNode(respText.errormessage[i]));
    }
    errDiv.appendChild(newUl);
}

Og den generere nu :

<div>
    <span>Der opstod en fejl:</span>
    <ul>
        <li>Databasen findes ikke!</li>
        <li>Tabellen findes ikke!</li>
        <li>Record findes ikke!</li>
    </ul>
</div>

Men FF virker stadigt som om siden ikke er loadet færdig og det fatter jeg ikke en bjælde af ?

Nogle ideer ?
Avatar billede w13 Novice
19. april 2008 - 11:34 #6
Kan du se nogle problemer i FF's fejlkonsol?
Avatar billede karl-koder Nybegynder
19. april 2008 - 11:38 #7
Nej der er ikke nogle fejl af nogen art og derfor undre det mig også at den opføre sig på den måde
Avatar billede olebole Juniormester
19. april 2008 - 12:11 #8
<ole>

Prøv at sætte denne request header:
    oHttp.setRequestHeader("Connection", "close");

/mvh
</bole>
Avatar billede olebole Juniormester
19. april 2008 - 12:21 #9
Det er ikke koden, du viser, der giver problemet - men Firefox har et problem omkring at lukke forbindelsen, hvorfor man ofte bruger den viste header  ;o)
Avatar billede karl-koder Nybegynder
19. april 2008 - 12:52 #10
Ok det har jeg så prøvet at tilføje i bunden af min metode, men det hjalp ikke meget
Avatar billede softspot Forsker
19. april 2008 - 13:04 #11
Jeg vil tro den skal indsættes inden du kalder send() på XMLHTTP-objektet og ikke i callback-metoden (hvis det er det du har gjort).
Avatar billede karl-koder Nybegynder
19. april 2008 - 13:24 #12
Ok Så skal jeg lige vide hvor i nedenstående du mener den skal placeres :

function AjaxReq(sMethod, sUrl, oVars, fnCallBack)
{
    var oProgress = document.getElementById("contentProgress");
    oProgress.style.display = "block";
    var oDone = document.getElementById("contentDone");
    oDone.style.display = "none";
   
    var oHttp = new XMLHttpRequest();
    oHttp.open(sMethod, sUrl, true);
    oHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");
    oHttp.onreadystatechange = _fnCallBack;
    var aQuery = [];
    for (var x in oVars) aQuery.push( encodeURIComponent(x) + "=" + encodeURIComponent(oVars[x]) );
    oHttp.send( aQuery.join("&") );
    aQuery = null;
   
    function _fnCallBack() {
        if (oHttp.readyState<4) return;
        fnCallBack(oHttp);
        oProgress.style.display = "none";
        oDone.style.display = "block";
        oHttp = null;
    }
    return this;
}
Avatar billede softspot Forsker
19. april 2008 - 13:33 #13
f.eks. umiddelbart efter

    oHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");
Avatar billede karl-koder Nybegynder
19. april 2008 - 15:49 #14
softspot >> Nu har prøvet at sætte den stump kode ind flere steder i både min AjaxReq og callback function og intet af det virker.

olebole >>
Hvor mener du den skal ind henne ?
Avatar billede olebole Juniormester
19. april 2008 - 17:04 #15
Alle request headers sættes det samme sted, så softspot har helt ret:
    oHttp.open(sMethod, sUrl, true);
    oHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");
    oHttp.setRequestHeader("Connection", "close");
    oHttp.onreadystatechange = _fnCallBack;
Avatar billede olebole Juniormester
19. april 2008 - 17:09 #16
De to request headers er HTTP-headers, som sendes 'i forkanten' af forespørgslen til serveren, så den f.eks. ved, hvad den skal stille op med data, når de ankommer. Derfor sættes de før, forespørgslen sendes (oHttp.send) - men efter den er åbnet (oHttp.open)
Avatar billede olebole Juniormester
19. april 2008 - 17:13 #17
Prøv evt. at lægge et link til et eksempel
Avatar billede karl-koder Nybegynder
19. april 2008 - 17:25 #18
Ok, tak for det, jeg har ikke lige pt. mulighed for at ligge noget op på min server da den er nede her i weekenden.

Men jeg tror jeg har fundet frem til hvad der er galt. Jeg har et "modal" vindue indeholdende en iframe/object hvori en side loades. Og af en eller anden årsag så lukkes der ikke for forbindelsen.

Køre jeg derimod siden direkte i browseren er er ingen problemer, så der er lige lidt jeg skal have kigget på i forbindelse med mit "modal" vidue.
Avatar billede karl-koder Nybegynder
20. februar 2009 - 01:00 #19
lukker
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