Eli ongelma on aika monimutkainen, mutta yritän selittää helpoimmalla tavalla. Eli ensinnäkin. xml tallennetaan tiedot näin "etsi_data.php"stä.
Pistän vain osan koodista, koska tuo on noin 200 riviä pitkä.
<?php $vastaus = "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?><selot>"; $selostukset = file("selostuksia.txt"); for($n = 0; $n < $moneskokuski; $n++) { $vastaus .= "<selostus>" . "<kuski_$n>$user[$n]</kuski_$n>" . "</selostus>"; } $vastaus .= "</selot>"; ?>
Kun menen sivulle etsi_data.php niin se tallentaa tiedot kuten haluan.
<selot> <kuski_0>teuro</kuski_0> </selot> − <selot> <kuski_1>mölli</kuski_1> </selot>
Mutta sitten kun mennään itse index.php:hen josta pyyntö lähetetään etsi_data.php sivulle tulee firefoxin virhekonsoliin seuraavaa:
kuskitt[i] is undefined rivi 161 ja se on tässä:
for (t = 0; t < kisaajienmaara; t++) { var kuskitt = Pyynto.responseXML.getElementsByTagName("kuski_$t"); kuskit[t] = kuskitt[i].childNodes[0].nodeValue; //TÄMÄRIVI }
ja sitten tässä koko hökellys tuosta index.php:stä tai melkein.
function Kuski(kayttajanimi, Keskittyminen, Hevosvoimat) { this.kayttajanimi = kayttajanimi; this.Keskittyminen = Keskittyminen; this.Hevosvoimat = Hevosvoimat; } function Tarkista(kayttajanimi, Keskittyminen, Hevosvoimat) { if (Hevosvoimat >= HEEPOSET_1 + 1) { first=1; if (first==1) { Parhain_heppa_2=Parhain_heppa; HEEPOSET_2=HEEPOSET_1; } Parhain_heppa=kayttajanimi; HEEPOSET_1=Hevosvoimat; } else { if (Hevosvoimat >= HEEPOSET_2 && Hevosvoimat <= HEEPOSET_1 - 1) { second=1; if (second==1) { Parhain_heppa_3=Parhain_heppa_2; HEEPOSET_3=HEEPOSET_2; } Parhain_heppa_2=kayttajanimi; HEEPOSET_2=Hevosvoimat; } else { if (Hevosvoimat >= HEEPOSET_3 && Hevosvoimat <= HEEPOSET_2 - 1) { Parhain_heppa_3=kayttajanimi; HEEPOSET_3=Hevosvoimat; } } } first=0; second=0; } function Start() { alustaPyynto(); merkki=2; Pyynto.onreadystatechange = Startt; Pyynto.open("POST", "etsi_data.php", true); Pyynto.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); Pyynto.send("data=" +merkki); } function Startt() { var i = 0; var t; var kisaajienmaara=10; var autot = ""; var kuskit = new Array(); var Kuski = new Array(); var hevosvoimat; var keskittyminen; if(Pyynto.readyState == 4) { if(Pyynto.status == 200) { while(Pyynto.responseXML.getElementsByTagName("kuski_1")[i] != null) { for (t = 0; t < kisaajienmaara; t++) { var kuskitt = Pyynto.responseXML.getElementsByTagName("kuski_$t"); kuskit[t] = kuskitt[i].childNodes[0].nodeValue; } } for (var o=0; o <= kisaajienmaara; o++) { alert(Kuski[o] +o) keskittyminen=rand(1,100); hevosvoimat=rand(1,300); Kuski[o] = new Kuski(kuskit[o], keskittyminen, hevosvoimat); Tarkista (Kuski[o].kayttajanimi, Kuski[o].Keskittyminen, Kuski[o].Hevosvoimat); } RaceStart(); } } }
(Edit: Jälkikäteen pahoittelut siitä että viesti on vähän tympeään sävyyn kirjoitettu. Alkoi vaan ärsyttää kun tahallaan yritetään hankaloittaa vastaamista)
mika132 kirjoitti:
Pistän vain osan koodista, koska tuo on noin 200 riviä pitkä.
Arvaa paljonko kiinnostaa alkaa debugata osittaista koodia, jota ei voi sellaisenaan ajaa?
Kokonaisen koodin kanssa voi polkaista Firebugin käyntiin ja selvittää ongelman 3,7 sekunnissa. Tai sitten voi yrittää päässään pyöritellä koodia ja pähkäillä puoli tuntia mikä voisi olla vikana.
No, veikkaan silti että vika on tässä:
mika132 kirjoitti:
var kuskitt = Pyynto.responseXML.getElementsByTagName("kuski_$t");
jossa siis asetetaan kuskitt arvoksi "undefined", koska siellä ei ole tagia "kuski_$t". Ilmeisesti luulet, että merkkijonoihin voi laittaa Javascriptissä samalla tavalla muuttujien arvoja kuin PHP:ssä, vaikka muuttujasi ei edes ole $t vaan t.
Eli todennäköisesti pitäisi olla:
var kuskitt = Pyynto.responseXML.getElementsByTagName("kuski_"+t);
Edelleen en takaa että virhe on tuossa, koska en jaksa alkaa hirveän paljon tarkemmin tutkimaan - ihan sen takia että mielestäni on melko tylsää tehdä "käsin" sitä minkä tietokone tekee automaattisesti paljon näppärämmin ja nopeammin.
Ai. En ajatellut noin. Ajattelin, että on helpompi tarkistaa, kun näkyy vain se ns. Virhe alue, mutta nyt laitan koko koodin, koska sain tälläisen ikkunan eteeni yrittäessäni mennä sivulle:
"Tällä sivulla oleva komentotiedosto on varattuna tai ei enää vastaa kutsuihin. Voit pysäyttää komentotiedoston suorittamisen tai odottaa sen suorituksen valmistumista.
Komentosarja: http://pelila.com/gameheaven/autourheilu/
No nyt on todella helppo testata kun voi laittaa sivun suoraan ajoon ja katsoa mihin se jää jumiin, kiitos.
Eli se jää tähän looppiin jumiin:
while(Pyynto.responseXML.getElementsByTagName("kuski_1")[i] != null) { //....
Sanoisin, että tuon voisi korjata laittamalla while tilalle if.
Yleisesti ottaen suosittelen vaikka firebugin käyttämistä, niin saat itsekin helposti selville tuollaiset ongelmat.
Kiits. Nyt se toimii melkein. En vain ymmärrä mitä tämä virhe tarkoittaa (Firefoxin virhekonsolista):
kuskit is not a consructor
Errori viittaa riville:
Kuski[o] = new Kuski(kuskit[o], keskittyminen, hevosvoimat);
Eli se löytyy tuolta paste sivula riviltä: 169.
Mun mielestä ongelma on siinä, että sulla on globaali funktio Kuski ja sitten sulla on paikallinen muuttuja Kuski.
Eli nyt tuo paikallinen Kuski muuttuja peittää sun funktion näkyvyyden ja kun yrität luoda uuden instanssin Kuski() -funktiolla, niin Kuski ei tarkoitakaan sitä funktiota vaan paikallista muuttujaa.
Eli muuta jomman kumman nimeä.
En voi enää uskoa tätä. Kaikki näytti toimivan melkein täydellisesti, kunnes tuli yksi suuri ongelma. Kaikki mitkä viittaavat kuskiin... Nimeen, taitoihin hevosovimiin tai aikaan niin näytetään undefinedinä. Pistän nyt koodit tähän. indexissä on siis se selostus systeemi.
Selitän vielä pari juttua miksi siellä missä selostukset etsitään on kuskit[1]
Syy on se, että yritin tulostaa ja katsoa onko yhdelläkään kuski taulukolla tulosta, mutta firefoxin virhekonsoli kertoo näistä riveistä seuraavaa:
kuskit is not defined.
etsi_data.php
Etsidatassa on rivit 8-19 tarkoituksella suljettu, kun en tarvitse noita koodissani, mutta ajattelin, että jos kuitenkin muutan sitä niin, että tarvitsen niin ei tarvitse kirjoittaa uudestaan.
ps. Suurkiitokset jos joku osaisi auttaa.
Ongelma korjattu. Minulla oli pieni TYPO siellä, jonka löysin äsken itse ja korjasin. :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.