Permalänk

JavaScript, vad är bäst?

Jag håller på med en sida där man kan rösta på olika bidrag (använder Jquery.
All information hämtas med PHP och Mysql, skrivs ut, sedan får man rösta med Javascript och "spara" sina röstningar.
Med varje "bidrag" så måste några variabler följa med: max antal röster och röster som redan finns på bidraget.
Hur ska jag göra för att få variablerna från PHP till Javascript?
Så här är det nu:

<div id="1" class="bidrag" max="15" startvotes="3"> <div id="2" class="bidrag" max="15" startvotes="12"> <div id="3" class="bidrag" max="11" startvotes="1"> //DETTA ÄR I EN EXTERN .js-FIL var max_rank = parseInt($(this).attr('max'));

Men det här kanske är bättre och enklare för klienten:

<div id="1" class="bidrag"> <div id="2" class="bidrag"> <div id="3" class="bidrag"> <script> var bidrag = new Array(); //Loopar ut alla rader med PHP bidrag[1]['max'] = 15; bidrag[1]['startvotes'] = 12; //osv </script> //EXTERN .js-FIL var max_rank = bidrag[1]['max'];

Vad är bäst?

Visa signatur

Intel 2500k @ 3,3ghz ● ASUS 6870 1GB Crossfire ● ASUS Sabertooth P67 ● XFX 750w ● 4Gb DDR3 ● Bitfenix Outlaw

Permalänk
Medlem

JSON

Visa signatur

"Say unto thine own heart, I am mine own redeemer"
Don't touch me when I'm crazy of that airplane glue

Permalänk
Skrivet av DarkBob:

På vilket sätt skulle JSON vara bättre nu?

Visa signatur

Intel 2500k @ 3,3ghz ● ASUS 6870 1GB Crossfire ● ASUS Sabertooth P67 ● XFX 750w ● 4Gb DDR3 ● Bitfenix Outlaw

Permalänk
Legendarisk

Det första alternativet riskerar att binda din data för hårt till presentationen, man bör generellt sett undvika att lagra data direkt i dom-trädet. Sedan bör du inte skriva ut datan direkt som javascript, det gör koden onödigt lång och kommer skapa en massa otrevlig upprepning av kod i dina mallar. I PHP bör du använda json_encode() istället. När du sedan har läst in all din data, oavsett källa, kan du skapa relationer mellan den och din presentation.

Skickades från m.sweclockers.com

Visa signatur

Abstractions all the way down.

Permalänk
Skrivet av Tunnelsork:

Det första alternativet riskerar att binda din data för hårt till presentationen, man bör generellt sett undvika att lagra data direkt i dom-trädet. Sedan bör du inte skriva ut datan direkt som javascript, det gör koden onödigt lång och kommer skapa en massa otrevlig upprepning av kod i dina mallar. I PHP bör du använda json_encode() istället. När du sedan har läst in all din data, oavsett källa, kan du skapa relationer mellan den och din presentation.

Skickades från m.sweclockers.com

Vad exakt menar du med "en massa otrevlig upprepning av kod"?

Visa signatur

Intel 2500k @ 3,3ghz ● ASUS 6870 1GB Crossfire ● ASUS Sabertooth P67 ● XFX 750w ● 4Gb DDR3 ● Bitfenix Outlaw

Permalänk

Skulle också valt JSON. Eftersom "max" och "startvotes" inte är riktiga attribut kommer koden inte vara giltig html.

Permalänk
Medlem

Varför måste du få max och startvotes från klienten? Hur hamnar informationen där från första början?

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Skrivet av Leedow:

Varför måste du få max och startvotes från klienten? Hur hamnar informationen där från första början?

Jag vill ha max och startvotes _till_ klienten för att visa rätt antal röster från början och för att blocka klienten från att rösta förbi max-värdet. Informationen skrivs ut via PHP.

Skickades från m.sweclockers.com

Visa signatur

Intel 2500k @ 3,3ghz ● ASUS 6870 1GB Crossfire ● ASUS Sabertooth P67 ● XFX 750w ● 4Gb DDR3 ● Bitfenix Outlaw

Permalänk
Skrivet av Full Strike:

Skulle också valt JSON. Eftersom "max" och "startvotes" inte är riktiga attribut kommer koden inte vara giltig html.

Vad sägs om mitt andra exempel då?

Skickades från m.sweclockers.com

Visa signatur

Intel 2500k @ 3,3ghz ● ASUS 6870 1GB Crossfire ● ASUS Sabertooth P67 ● XFX 750w ● 4Gb DDR3 ● Bitfenix Outlaw

Permalänk

Valideringen borde ske på serversidan, vilket innebär att värdena inte behöver skrivas ut på klientsidan öht.
Varför inte bara validera informationen på serversidan, förslagsvis med ajax, när användaren röstar?

Permalänk
Skrivet av Björnen123:

Vad sägs om mitt andra exempel då?

Skickades från m.sweclockers.com

Funkar också, men jag skulle gjort något sånt här:

index.html

<script type='text/javascript' src='/js/votes.js.php' /> ... <div id="1" class="bidrag"> <div id="2" class="bidrag"> <div id="3" class="bidrag">

votes.js.php

... $arrBidrag = array(); $arrBidrag[1] = array("max" => 15, "startvotes" = 12); $arrBidrag[2] = array("max" => 15, "startvotes" = 12); ... echo "var votes = " . json_encode($arrBidrag) . ";";

Sen kan du använda javascript för att leka med objektet med hjälp av jquerys $.parseJSON(votes)

Permalänk
Medlem
Skrivet av Björnen123:

På vilket sätt skulle JSON vara bättre nu?

Skrivet av Björnen123:

Vad exakt menar du med "en massa otrevlig upprepning av kod"?

Med tanke på dina svar här så kanske lite studier i vad JSON är och hur du kan använda det tillsammans med jQuery och PHP vara på sin plats innan du ger dig ut på äventyr med en sådan här liter mer avancerad funktion.

Visa signatur

Fractal Design Arc Svart | MSI Z68A-GD55 G3 REV B3 | Intel® Core i7 2600K, 3.4GHz, 8MB | Corsair 16GB (4x4096MB) CL9 1600Mhz VENGEANCE LP | MSI GeForce GTX 670 | Phanteks PH-TC14PE CPU Cooler (vit) | Corsair Power Supply 650W TX M, Modular, ATX, PS/2 | SSD (okänd tillverkare) + 2 äldre SATA2 diskar på 750 Gb, 350 gb. | OS: Microsoft Windows 10 home.