Eli päätin nyt tehdä karttani lataamisen niin, että kaikki tiedot ladataan istuntoon ja kartta todella toimi paljon nopeampaa. Ongelmana on, että jostain syystä lataus systeemini ei lataa kuin osan kartasta istuntoihin vaikka käsken ladata kaiken.
lataus_ajax.php
<?php //Eli tässä on kohta jossa kaikki ladataan tietokannasta istuntoihin. $result301 = $connection->prepare("SELECT Data, X, Y, Nimi, Omistaja, X_koodinaatit, Y_koodinaatit, Kuvana FROM Glory_Pride_Kylat WHERE Data > ? ORDER BY Y_koodinaatit ASC"); $result301->execute(array(0)); $tulos = array(); while ($table = $result301->fetch()) { $tulos6[] = $table; } $i=0; foreach ($tulos6 as $f) { $_SESSION['village_ingormation_x_'.$i.''] = $f["X_koodinaatit"]; $_SESSION['village_ingormation_y_'.$i.''] = $f["Y_koodinaatit"]; $_SESSION['village_ingormation_omistaja_'.$i.''] = $f["Omistaja"]; $_SESSION['village_ingormation_kuvana_'.$i.''] = $f["Kuvana"]; $_SESSION['village_ingormation_data_'.$i.''] = $f["Data"]; $_SESSION['village_ingormation_nimi_'.$i.''] = $f["Nimi"]; $_SESSION['how_many'] = $i; $i++; } ?>
<?php //Tämä on sitten taas lataa.php tiedosto.. Eli se josta lähetetään tietoa lataus_ajax.php tiedostoon. //Täällä yläpuolella haetaan nuo x_koodinaatit_oma joita en laittanut tähän jotta tämä pysyisi edes hieman puhtaanpana. ?> <script type="text/javascript"> var Pyynto; var first_time=1; var maksimi_x=<?php echo ''.$x_koodinaatit_oma.''; ?>; var maksimi_y=<?php echo ''.$y_koodinaatit_oma2.''; ?>; function alustaPyynto() { document.getElementById("map_window").innerHTML = "<h2>Ladataan..</h2>"; if(window.ActiveXObject) { Pyynto = new ActiveXObject("Microsoft.XMLHTTP"); } else if(window.XMLHttpRequest) { Pyynto = new XMLHttpRequest(); } } function suoritaPyynto() { alustaPyynto(); Pyynto.onreadystatechange = kasitteleVastaus; maksimi_x+=1; Pyynto.open("GET", "lataus_ajax.php?x_akseli_maksimi="+maksimi_x+"&y_akseli_maksimi="+maksimi_y, true); Pyynto.send(null); } function kasitteleVastaus() { if(Pyynto.readyState == 4) { if(Pyynto.status == 200) { location.href='http://www.tehogames.com/gameheaven/glorypride/'; <?php $_SESSION["village_information_data5"]=1; ?> } else { alert("Kartan latauksessa tapahtui virhe. Virhe ID = 5"); } } } </script> <body onload="suoritaPyynto()"> <?php echo '<p id="map_window"> </p>'; ?>
Koodit voivat olla hieman sekavan näköisiä koska olen yrittänyt kaikennäköistä ja siistiminen jäänyt hieman puolitiehen.. jonka joudun viimeistään lopussa kylläkin tekemään.
$_SESSION["village_information_data5"] on muuttuja mikä tarkistaa onko kartta ladattu.
joo en tiiä.. mutta eikös noin olisi parempi hoitaa toi osa.
//... $i = 0; while($table = $result301->fetch()) { $_SESSION['village_ingormation_x_'.$i.''] = $table["X_koodinaatit"]; $_SESSION['village_ingormation_y_'.$i.''] = $table["Y_koodinaatit"]; $_SESSION['village_ingormation_omistaja_'.$i.''] = $table["Omistaja"]; $_SESSION['village_ingormation_kuvana_'.$i.''] = $table["Kuvana"]; $_SESSION['village_ingormation_data_'.$i.''] = $table["Data"]; $_SESSION['village_ingormation_nimi_'.$i.''] = $table["Nimi"]; $_SESSION['how_many'] = $i; $i++; } //..
Ettei vaan tulisi jokin SESSIONIN muistinrajoitus vastaan? Eikö tuo kartta ollut aika iso, eli jotain miljoona ruutua?
Testaamalla pitäs selvitä jos muutat koodin tuohon mitä geijo laittoi ja laitat whilen jälkeen:
Ja onko tosiaan kyysessä se että tuossa ladataan erittäin laaja kartta vai onko kyseessä vain kylät?
Siinä lienee koko kartta jossa joka ruudulle tallennettu kuva bitmappina... Koordinaatit, oma nimi ja kaikki :) Edellisen viestiketjun ohjeita ei siis ole luettu ollenkaan.
Jotenkin musta tuntuu että nyt on väärät työkalut käytössä, eli PHP.
Istuntohan tallennetaan oletuksena tiedostoon, eli jos tämä nopeuttaa sovellusta paljon, kannattaisi ehkä luopua koko tietokannasta ja käyttää vain tiedostoja. Luultavasti nopeusongelman syynä kuitenkin on edelleen se, että yritetään ladata koko kartta eikä vain tarvittavaa osaa.
Itse koodi näyttää siltä, että et tajua PHP:n perusasioita. Istuntomuuttujaa village_information_data5 ei suinkaan aseteta vasta AJAX-pyynnön jälkeen, vaan tuossa se asetetaan jo ensimmäisellä sivunlatauksella, koska kaikki PHP-koodi – siis aivan kaikki PHP-koodi – ajetaan samalla kertaa täysin riippumatta siitä, mitä HTML:ää tai JavaScriptia seassa on.
Nykyisestä koodistasi ei käy ilmi mitään tärkeää. Mistä tiedät, onko kaikki data istunnossa? Mistä tiedät, ettei vika olekin siinä, että et vain osaa lähettää kaikkea dataa selaimelle?
Aihe on jo aika vanha, joten et voi enää vastata siihen.