Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Ajax + php-taulukko

javerkki [15.12.2008 08:32:44]

#

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

Grez [15.12.2008 09:50:58]

#

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.

javerkki [15.12.2008 10:02:19]

#

Grez:

Tulostan ulos taulukon php:ssa

kirjat[0] ="Liisa ihmemaassa";
kirjat[1] ="Karvinen";

echo $kirjat;

Eikö responseText osaa lukea kirjoja ?

Lebe80 [15.12.2008 10:08:26]

#

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.

Grez [15.12.2008 14:28:16]

#

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);
?>

Metabolix [15.12.2008 14:40:03]

#

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"];

javerkki [16.12.2008 13:43:20]

#

Tunnustan tyhmyyteni.

Nyt tajusin mitä yritin tehdä. Kiitos ja anteeksi.

Nyt toimii hienosti.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta