Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: [JS] Tekstin jakaminen

Sivun loppuun

Petja [17.05.2011 17:14:51]

#

Esitän nyt tyhmän kysymyksen.
Itselläni näet hyvin heikko tuntemus JavaScriptistä.

Olen siis tekemässä hedelmäpeliä Ajaxilla. Toteuttaminen on muuten ok, mutta haluaisin, että JavaScript jakaisi palvelimen palauttaman numerosarjan kolmeen osaan. Palvelin palauttaa JavaScriptille numerosarjan muodossa ?|?|? (esim. 1|2|3). JavaScriptin tehtävä on jakaa nämä kolme eri lukua omaan variableensa. Miten teen?

Googlea käyttämällä en saanut mitään järkevää aikaiseksi.

jimi-kimi [17.05.2011 17:27:49]

#

Eka osuma: http://www.developertutorials.com/tutorials/php/javascript-php-explode-function-051018-1025/

Hakusanat: Javascript explode

Aikaa meni: .000000001sec

tsuriga [17.05.2011 17:43:43]

#

JSON helpottaa elämääsi suuresti, varsinkin kun nyt uuden ECMAScript 5:n myötä JSON on kielessä natiivina (ja kirjastot mahdollistavat myös vanhojen selainten tukemisen). Eli seuraavanlaisesti:

Palvelimella

<?php
echo json_encode($arr);
?>

Selaimessa

var arr = JSON.parse(data);

Yucca [18.05.2011 09:57:00]

#

Kysymykseen on suuri määrä aika helppoja vastauksia ja epäilemättä myös muita vastauksia. Niistä on varsin vaikea sanoa, mikä on paras.

Yksinkertaisuudellaan ja luettavuudellaan yrittää viehättää

var arr = data.split("|");

Jos palvelimen palauttama data on muuttujassa data, niin tuo purkaa sen muuttujiin arr[0], arr[1] ja arr[2]. Tässä yhteydessä on varmaankin syytä tarkistaa, että arr.length == 3 ja että data on muutenkin oikeaa muotoa. (Palvelimesta tulevan datan tarkistus on terveellistä vainoharhaisuutta.)

Toisaalta datan muototarkistusten takia parempi ratkaisu voisi olla match()-metodin käyttö. Sopivan lausekkeen kirjoittaminen sitä varten vaatisi kuitenkin tarkan tiedon siitä, mitä önumerosarjaö tässä tarkkaan ottaen tarkoittaa.

tsuriga [18.05.2011 17:25:51]

#

Mikäs siinä JSONissa on, että omatekemä vempele sen peittoaa? Varsinkin kun data on toivottavasti alun perinkin jossain muodossa, joka on helpompi muuttaa JSON-muotoon kuin putkimerkeillä erotelluksi. Jos data tulee valmiina noin, suosittelen vaihtamaan datan tallennusmuotoa.

JSONin kanssa tarkistus toimii try-catch -lauseella, JSON.parse heittää SyntaxErroria epäonnistuessaan. Jos palvelimen palauttamaa dataa tarvitsee tutkiskella vielä tarkemmin, Array sisältää nykyään apumetodeja, jotka saa helposti ujutettua samaan syssyyn, esim.

JSON.parse(data)
    .filter(function (value) {
        return typeof value === "number";
    });

Othnos [18.05.2011 20:12:33]

#

tsuriga kirjoitti:

Mikäs siinä JSONissa on, että omatekemä vempele sen peittoaa? Varsinkin kun data on toivottavasti alun perinkin jossain muodossa, joka on helpompi muuttaa JSON-muotoon kuin putkimerkeillä erotelluksi. Jos data tulee valmiina noin, suosittelen vaihtamaan datan tallennusmuotoa.

Mikäs natiivi javascriptissä on vikana kyseisessä tapauksessa?

Petja [18.05.2011 21:35:32]

#

Sain tuolla Jimi-Kimin kertomalla jutulla toteutettua.
Päädyin Googlella jo aiemmin samaiseen paikkaan, mutten kiinnittänyt huomiota tarpeeksi tuon pikku skriptin löytämiseen.

Yucca [18.05.2011 22:21:14]

#

tsuriga kirjoitti:

Mikäs siinä JSONissa on, että omatekemä vempele sen peittoaa?

Mitähän omaatekemää ajattelet olevan standardifunktiossa split()?

tsuriga kirjoitti:

Jos data tulee valmiina noin, suosittelen vaihtamaan datan tallennusmuotoa.

Kysymys koski dataa, jonka palvelin lähettää tietyssä muodossa. Kysymyksessä ei edes vihjattu siihen, että tätä muotoa voisi tai saisi muuttaa.

tsuriga kirjoitti:

JSON.parse heittää SyntaxErroria epäonnistuessaan.

Sanan öepäonnistuaö joillakin arvoilla. Esittämäsi koodi kuitenkin varmasti epäonnistuu sen datan käsittelemisessä, joka kysymyksessä kuvattiin.

tsuriga [19.05.2011 13:53:42]

#

Muutama syy siihen, miksi oletan datan lähetysmuodon olevan vaihdettavissa: Ensinnäkin, data tulee usein putkimuodossa siksi, että aloittelijan opas X on niin ohjeistanut. Petja ilmaisi olevansa aloittelija JavaScriptin kanssa. Myös viestimäärä ja muut Petjan viestit antavat olettaa, että kyseessä on suhteellisen aloitteleva koodimaisteri. Toisekseen, oman palvelimen todennäköisyys lienee suurempi kuin sen, että joku pyörittää (hedelmäpeli)palvelinta, joka palauttelee putkieroltetua numerodataa.

Näin ollen kyseessä olisi siis datan välittäminen ohjelmien välillä, eli juurikin se, mihin JSON on tehty. Muutama syy, miksi JSON-muotoinen data on ohjelmien väliseen tiedonsiirtoon tekstimuotoa parempi vaihtoehto:

Othnos: Natiiviahan se JSONikin nykyään on. Ei splitissä sinänsä vikaa ole, se vaan lienee tässä tilanteessa huonompi ratkaisu, kun ajatellaan kokonaistilannetta. Se, että JSONin käyttäminen tässä tapauksessa lisännee siirrettävän datan määrää, kun datan esitysmuoto on pidempi ja jos halutaan tukea myös vanhoja selaimia, ei luultavasti näillä siirtomäärillä vielä riitä perusteluksi JSONin hylkäämiselle. Jos kyseessä tosiaan on ulkoinen palvelin, eikä Petjan itse muotoilema data, toki split on silloin ns. The Sh*t, yo.


Sivun alkuun

Vastaus

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

Tietoa sivustosta