Hei!
Suoritan php-sivulla MySQL kyselyn, missä saan php-taulukkoon kirjannimiä.
SELECT kirjanimi, isbn FROM kirjat...
php-sivua kutstutaan javascript funktiossa (ajax).
Nyt ongelma on se, että miten saan tulokset responseText:stä
Kun vastaustulos on siis php-array. ?
Kun kokeilen alertilla tulostaa responseText:ä saan vain vastauksen: Array
Miten saan esim js for loopissa tulostettua jokaisen solun taulukosta ?
Kiitos
javerkki kirjoitti:
Nyt ongelma on se, että miten saan tulokset responseText:stä
Et mitenkään ilman että muutat PHP-koodia. PHP antaa tapauksessasi ulos ainoastaan tekstin "Array" eikä mitään muuta, joten Javascript ei voi taikoa puuttuvia tietoja takaisin.
Sinun täytyy PHP:ssä "tulostaa" tiedot esimerkiksi XML:nä, JSON:na tai vaikka csv:nä ja käsitellä sitten vataavasti Javascriptin puolella.
Grez:
Tulostan ulos taulukon php:ssa
kirjat[0] ="Liisa ihmemaassa"; kirjat[1] ="Karvinen"; echo $kirjat;
Eikö responseText osaa lukea kirjoja ?
en ymmärrä miten tuo voisi toimia javaScriptissä, kun se php:ssakin tulostaa vain "tyhmän" tekstin, ei siis taulukon sisältöä. Eli muuta tuo johonkin järkevään muotoon.
Kuten sanottu, riippuen käyttötarkoituksesta, tulosta tuo ihan html-taulukkona, tai järkevissä JSON-muodossa, xml.... yms. yms.
No minäpä sanon sinulle minun taulukkoni:
Array
Kerropa minulle mitä tuossa taulukossa oli? Jaa eikö onnistu tiedon kaivaminen? Miten luulet että se javascript pystyisi kaivamaan tuosta enemmän tietoa kuin sinä. Se on kuitenkin vain tyhmä ohjelma, ja sinä olet sentään ihminen.
Väännän vielä toisella tavalla rautalangasta:
Seuraavat kaksi koodia tuottavat täsmälleen saman lopputuloksen:
<?php kirjat[0] ="Liisa ihmemaassa"; kirjat[1] ="Karvinen"; echo $kirjat; ?>
<?php echo 'Array'; ?>
Voisit kokeilla muuttaa koodisi seuraavaksi:
<?php kirjat[0] ="Liisa ihmemaassa"; kirjat[1] ="Karvinen"; var_export($kirjat); ?>
Kaivoin hatun esiin, tällaista löytyi.
<?php function arr_to_str($arr) { foreach ($arr as $k => &$v) { $v = rawurlencode($v); } return implode(":", $arr); } echo arr_to_str($kirjat); ?>
function str_to_arr(str) { var arr = str.split(":"); for (var i in arr) { arr[i] = unescape(arr[i]); } } var kirjat = str_to_arr(ajax.responseText);
Huomioi, että koodi ei säilytä taulukon indeksointia, jos PHP:n puolella on muuta kuin 0, 1, 2, ..., vaan välistä puuttuvat indeksit tulevat käyttöön:
/* PHP, indeksit 0, 4, 7 */ $kirjat = array(0 => "K1", 4 => "K2", 7 => "K3"); /* JS, indeksit 0, 1, 2 */ kirjat = ["K1", "K2", "K3"];
Tunnustan tyhmyyteni.
Nyt tajusin mitä yritin tehdä. Kiitos ja anteeksi.
Nyt toimii hienosti.
Aihe on jo aika vanha, joten et voi enää vastata siihen.