Eli minulla on suuri ongelma ollut jo viikon verran. Jos etsin PHP:llä pari muuttujaa, niin miten saan ne Javascript muuttujaan? Esimerkki (ei koodini)
<?php $muuttuja=1; ?>
tuo lisättäisiin Javascript muuttujaan nimeltä "tehot" Yrittänyt:
<?php $muuttuja=1; echo '<script> var tehot=$muuttuja </script> ?>
Ei toimi ja olen koittanut myös ilma echoa.
Olen joskus saanut tuon yhdistämisen toimimaan, mutta siitä on ainakin vuosi aikaa, joten ei muistu mieleen.
Hipsujen sijaan lainausmerkit, niin toimii.
<?php $muuttuja = 1; echo "<script type=\"text/javascript\">\n"; echo "var tehot = $muuttuja;\n"; echo "</script>"; ?>
Minusta on attribuuttejen arvoissa järkevämpi käyttää lainausmerkkejä, ja muuttujien ympärille ei tarvitse laittaa aaltosulkuja kun käytetään lainausmerkkejä. Lisäksi ei ole järkevää katkaista PHP:n suoritusta (?>) ja aloittaa sitä uudelleen (<?php) heti sen jälkeen.
Speksin mukaan attribuuttien arvojen ympärillä voidaan käyttää sekä heitto- että lainausmerkkejä. Aaltosulkeita ei lainausmerkkien kanssa tarvitse, toiset (mm. allekirjoittanut) vain tykkäävät käyttää niitä kertomaan eksplisiittisesti, että tulostetaan muuttujan sisältöä silloin kun käytössä on lainausmerkit. Perättäiset loppu- ja aloitustagit ovat varmaan perua aloittajan viestistä. Niiden välissähän voi olla tavaraa, ja suositeltavasti onkin, nimittäin HTML-tageja aina sinne headissä sijaitsevaan script-tagiin saakka (kyseessä siis sisällön ja esityksen erottelu).
Javascript on vielä hieman kehitys vaiheessa minulla, joten kysyisin, että millaisella scriptillä saadaan tietää joidenkin tiettyjen muuttujien arvojärjestys. Esimerkiksi.
var Pelaaja_1_taito=10
var Pelaaja_2_taito=11
var Oma_pelaaja_taito=5
Miten nuo saadaan järjestykseen? Esimerkiksi tulostettua.
Juu itsekkin löysin tuon ja katselin, mutta en ehtinyt editoimaan, että sellainen, että tietyt ajotaidot tallennetaan toisen arrayn alle. Eli Arra_nimi ja Array_taito. Jos taito 1 on suurin niin katsotaan mikä kuski omistaa taidon.
Olisiko sitten oliot ratkaisu? Eli tehdään halutut ominaisuudet, jotka tallennetaan taulukkoon. Sitten määritellään sorttausfunktio ja järjestellään taulukko.
En hallitse olioita kunnolla ja koodissani onkin virhe luultavasti, kun mitään ei tule:
var arr = new Array(3); arr[0] = '$ajotaito_oma'; arr[1] = '$ajotaito_2'; arr[2] = '$ajotaito_1'; var arr_name = new Array(3); arr_name[0] = 'test'; arr_name[1] = 'test1'; arr_name[2] = 'test2'; kisaaja['kayttajanimi'] = 'arr_name[0]'; kisaaja_1['kayttajanimi'] = 'arr_name[1]'; kisaaja_2['kayttajanimi'] = 'arr_name[2]'; kisaaja['taito'] = 'arr[0]'; kisaaja_1['taito'] = 'arr[1]'; kisaaja_2['taito'] = 'arr[2]'; function ominaisuudet(olio) { var tulos = ''; for (var i in olio) { tulos += i + ' = ' + olio[i] + '\n'; } return tulos; } ominaisuudet(kisaaja); ominaisuudet(kisaaja_1); ominaisuudet(kisaaja_2); document.tapahtuma.d3.value=taito.sort(sortNumber);
kaikki tuohon liittyvä koodi. Eli muuta erroria ei voi olla, koska se toimi ennen olioita, joten ei tarvitse kysyä mikä d3 on missä se määritellään tai tapahtuma. Eli miten saan taidot järjestykseen ja tulostettua taidon omistajan nimi taito järjestyksessä?
Ja koodissa kaikki on hipsuilla siksi, että koodi on echo "" sisällä.
Sori tupla posti, mutta osaako joku auttaa?
Koodissa on lukuisia virheitä, joita voit itse tutkia esimerkiksi katsomalla selaimella, mitä sivun lähdekoodiin on oikeasti tulostunut, ja lukemalla Firefoxin virhekonsolista (löytyy työkaluvalikosta) virheilmoitukset. Lisäksi kannattaa vaikka alert-funktiolla tulostaa noiden muuttujien sisältöjä, sieltä varmaan selviää paljonkin.
Yritin vääntää ja kääntää firefoxin errorien mukaan, mutta en onnistunut. Mikä siis suomeksi on koodissani väärin? Sen huomasin, että koodini on aivan sekaisin.
Koodissa ei ole kahden taulukon alustusten jälkeen paljonkaan järkeä, eli älä yritä korjata sitä vaan kirjoita ihan uusi. Lue jotain opasta ja ajattele, mitä kirjoitat ja miksi kirjoitat niin.
Voisit aloittaa siitä, että siirrät JS:n pois echo-lauseesta, jottei tarvitse kikkailla lainausmerkkien ja hipsujen kanssa. Esimerkiksi JS-koodissasi oleva '\n' toimii nykymuodossaan aivan väärin, kuten sivun lähdekoodista näkisit. Lisäksi olet käyttänyt aivan liikaa hipsuja aivan väärissä paikoissa. Muuttujiasi ei ole alustettu, mitään taito-muuttujaa ei tuon koodin perusteella edes yritetä asettaa, ja ominaisuudet-funktio on aivan turha.
Jos palvelimella on funktio json_encode (PHP 5.2 tai erillinen laajennos), sillä saa helposti PHP:ltä dataa JS-muotoon.
<?php // PHP-koodia... $data = array("taulukko" => array("a", "b", "c"), "luku" => 12.3, "teksti" => "Hei!"); ?> <script type="text/javascript"> /* <![CDATA[ */ // JS-koodia... var data = <?php echo json_encode($data); ?>; var taulukko = data.taulukko; // ["a", "b", "c"] var luku = data.luku; // 12.3 var teksti = data.teksti; // "Hei!" /* ]]> */ </script> <?php // PHP-koodia...
Aihe on jo aika vanha, joten et voi enää vastata siihen.