Tuli tuossa hyvä tilaisuus opetella ajaxia ja heti meni sormi suuhun JavaScriptin kanssa.
Mulla on xml-dokumentti, jossa dataa muodossa:
<root> <TestPlace id="1"> <Cycles>1345</Cycles> <Runtime>25644</Runtime> </TestPlace> </root>
Tuo data haetaan XMLHttpRequestilla seuraavasti:
http.open("GET", "xmlrequest.php?act=testdetails&testplace=" + escape(PlaceNumber), true) http.onreadystatechange = GetTestDetailsResponse http.send(null)
Sitten tulee varsinainen ongelma. Haluaisin muodostaa xml-dokumentista seuraavanlaisen taulukon:
<table> <tr> <td>Cycles:</td> <td>1345</td> </tr> <tr> <td>Runtime</td> <td>25664</td> </tr> </table>
, mutta miten ihmeessä saan JavaScriptillä tehtyä tuon dynaamisesti? Tässä yritys joka toimii, mutta ei ole dynaaminen:
function GetTestDetailsResponse(){ if(http.readyState == 4){ var response = http.responseXML.documentElement; x=response.getElementsByTagName("TestPlace") txt = "" xx=x[0].getElementsByTagName("Cycles") txt = txt + '<tr><td class="headercell">Cycles</td>' txt = txt + '<td>' + xx[0].firstChild.data + '</td></tr>' xx=x[0].getElementsByTagName("Runtime") txt = txt + '<tr><td class="headercell">Runtime</td>' txt = txt + '<td>' + xx[0].firstChild.data + '</td></tr>' txt = '<table class="testdetails">' + txt + "</table>" document.getElementById(PlaceNumber+'div').innerHTML = txt document.getElementById(PlaceNumber+'div').style.display = 'block' } }
Osaisikohan joku lonkalta heittää miten saisin tuon dynaamiseksi? Yritin googlen avulla selvitellä tuon http.responseXML.documentElement -objektin(?) rakennetta, mutta huonolla menestyksellä... Vai onko jopa xml-dokumenttini rakenne vääränlainen?
Mitä tarkoitat dynaamisuudella? Itse en ole xml-tiedostoa käsitellyt Ajaxilla, mutta onko tuo documentElement tarpeellinen? Eikö xml-puu löydy ihan tuolta http.responseXML:stä?
Dynaamisuudella tarkoitan sitä, että saisin listattua nuo kaikki <testplace>-solmun(?) lapset(?) siten, että GetTestDetailsResponse()-funktiossa ei tarvitsisi etukäteen tietää noiden lapsien nimiä (Cycles, Runtime). Jos siis muutan tietokantahakua tuolla xml-dokumentissa, ei tarvitsisi Ajaxia päivittää, vaan se tekisi xml-puusta automaattisesti sen taulukon.
Pikkasen on vielä hakusessa nuo xml:n termit... Korjatkaa toki, jos meni jotain väärin.
Noniin, ongelma ratkesi hyvin nukutun yön jälkeen. Tässä vielä nopea ratkaisu, jolla sain toimimaan:
function GetTestDetailsResponse(){ PlaceNumber = Dest if(http.readyState == 4){ var response = http.responseXML.documentElement txt = "" var n = response.firstChild; //n = n.nextSibling while (n != null){ if (n.nodeType == 1){ k = n.firstChild while (k != null){ if (k.nodeType == 1){ try{ l = k.firstChild txt = txt + '<tr><td class="headercell">' + k.nodeName + '</td><td>' + l.nodeValue + '</td></tr>' }catch(er){ txt = txt + '<tr><td class="headercell">' + k.nodeName + '</td><td>0</td></tr>' } } k = k.nextSibling } } n = n.nextSibling } txt = '<table class="testdetails">' + txt + "</table>" document.getElementById(PlaceNumber+'div').innerHTML = txt document.getElementById(PlaceNumber+'div').style.display = 'block' } }
Aihe on jo aika vanha, joten et voi enää vastata siihen.