json_encode

Pozdrav,
Radim chat za SMF u kojem svaki sekund šaljem response i provjeravam ima li novih korisnika online i poruka. Eh sad, da nebi slao više requesta šaljem jedan te pomoću JSON-a vraćam rezultat znači kao json string u kojem su poruke i online korisnici. No problem je što JSON sve ‘zbuga’, sve je prikazano na slici!

Slika

Zbog ovih razmaka ja mislim (oznaceni minusom):

$return[‘messages’] .= '------------------------------
-------------

  • aha hvala, sad je problem sto on valjda automatski pretvara html special chars u prave vrijednosti…
    Slika

    Neznam jesam li blesav zbog ovoga (vjerovatno jesam) …ali kako meni nije palo na pamet da postoji nesto kao JSON onda sam si sam isao raditi parser…s kojim sam toliko zadovoljan da ga koristim još i danas. I takodjer i dalje nemam pojma kako se tocno JSON koristi, pa cu ukratko opisati nacin koristenja moga.

    Recimo imas podatak koji zelis poslat na server:

    var podatak=new Object();
    podatak.boja=‘crvena’;
    podatak.osoba=new Object();
    podatak.osoba.ime=‘miki’;
    podatak.osoba.spol=‘M’;
    podatak.broj=4;
    podatak.skup=[1,4,“ana”,[1,2,3],“miki2”,podatak.osoba];

    sve sto trebas napraviti je ovo:
    podatak=toBS(podatak);
    i na server strani:
    podatak=fromBS(podatak);

    znaci toBS() pretvaras u string i fromBS() oživljavaš varijablu iz stringa. Sve što ti treba su dvije skriptice koje trebas inkludati. jedna na strani servera za php i druga na client strani za js.

    Podatak kao sto vidis moze biti ugnjezden koliko god duboko zelis…takodjer ne mora biti objekt, moze biti i u izvoru lista tipa:
    podatak=[1,2,3];
    send=toBS(podatak);

    ali vjerovatno bi doslo do popizditisa da pokusas poslati:
    podatak=“miki”;
    send=toBS(podatak)
    …isto kao što bi moglo biti gadno:
    podatak=new Object();
    podatak.nesto=podatak;
    …onda bi ga naravno bacio u vječnu petlju, baš bi volio čuti kako je ovo rješeno kod JSON-a.
    Tako da nekih fensi opcija nema, kao što nema prepoznavanje svih tipova podataka…poput boolean ili sta ja znam…prepoznaje broj, string, lista ili objekt. i to osnovno radi i to na iznimno jednostavan način korištenja.

    Eto, ja bi baš iskreno volio vidjeti bi li moj parser zapeo na tom problemu koji imaš, pa ako ti se da probaj…pošalješ mi mail na PM a ja ti pošaljem skripte!

    P.S. još jedna mana…nije čitljiv kao JSON, dok je u string formatu nebi ga dragi Bog pročitao xd. …evo kako izgleda podatak iz početka priče:

    @bozoou - Aj pošalji taj svoj parser na PM pa ćemo vidjet dali radi :slight_smile:

    Sve ti je tu, JSON, napisano.

    Ma netreba ni PM, evo tu su u privitku (zanemario sam prvo da mogu ovdje uploadat privitak) …jedino nisam mogao uploadat ekstenzije .js i .php pa sam ih zamjenio sa .txt !!!

    Probaj istražiti termin rekursivna petlja tako se rješevaju problemi tog tipa.
    U petlji pozivaš metodu koja radi novu petlju tako se može iterirati nad članovima niza koji sadrže nove nizove.
    Inače, dobronamjeran savjet, ovo bi trebao isprobati i polomiti si kosti na ovom jer je jedno od osnovnih stvari u programiranju.
    Dokle god mi nisu govorili kako moram raditi uvijek sam mogao izdizajnirati apliakciju da radi bez rekurzije. No dobio zadatak koji se mogao riješiti samo preko toga.
    I na kraju mi moj “manager” tvrdio da nisam imao pojma što sam iskodirao kad sam riješio problem.
    To je jedan od stvari koji developeri izbjegavaju a onda to povlači i dizajniranje baze prema samom koda što dovodi do novih limitacija.
    Znači jedna od osnova u programiranju a ustvari i nije komplicirana stvar.

    Na server strani nebi trebao koristi svoj parser već od PHP, tako bi mogao znati dali tvoj je valjan. I pošto volim filozofirati to ti je jedna od osnovih filozofija u programiranju da ako postoji kod koji su naštrikali “veliki igrači” da se pokušava sljediti njihov kod. Njihov kod je vjerovatno otpimiziran, debuggiran i prilagođen da radi u različitim verzijama PHP.

    Pa naravno da sam rješio rekurzijom…inače nebi mogao rješiti ugnježdene liste do bilo koje dubine. Ali kad objekt poziva sam sebe kao u onom primjeru onda je ta dubina beskonačna!!
    Inace sve radim sa rekurzijom…gdje se ona moze iskoristiti!

    Ovaj drugi dio se slažem…treba slijediti gotove stvari…ali ovaj svoj pareser sam zavolio i dobro me sluzi pa mi se tesko maknut od njega. I eto…cisto me zanima hoce li moci premostiti problem autoru teme.

    @bozoou - tvoj parse ne pravi onakve greške ali ne vraća kao JSON objekt i umjesto : stavlja nekakav dummy text

    messagesdFhz5s1TB<li><a href="http://localhost/smf/index.php?action=profile;u=1" style="color: #FF0000;" target="_new">System32</a>: lol
    <span class="smalltext date">November 22, 2012, 09:07:21 pm</span><span><a title="Delete message" onclick="LGFC_OpenModal('<div id="lgfc_delete_message_output" style="display: none;"></div>Are you sure you want delete this message?
    
    <input type="button" value="Yes" onclick="LGFC_DeleteMessage(8)" class="button_submit" /> <input type="button" value="No" onclick="LGFC_CloseModal()" class="button_submit" />')"><img src="http://localhost/smf/Themes/Toxic/images/icons/delete.gif" /></a></span></li><li><a href="http://localhost/smf/index.php?action=profile;u=6" style="color: ;" target="_new">Test 4</a>: test 4
    <span class="smalltext date">November 01, 2012, 07:52:20 pm</span><span><a title="Delete message" onclick="LGFC_OpenModal('<div id="lgfc_delete_message_output" style="display: none;"></div>Are you sure you want delete this message?
    
    <input type="button" value="Yes" onclick="LGFC_DeleteMessage(7)" class="button_submit" /> <input type="button" value="No" onclick="LGFC_CloseModal()" class="button_submit" />')"><img src="http://localhost/smf/Themes/Toxic/images/icons/delete.gif" /></a><a title="Kick user (Ban)" onclick="LGFC_OpenModal('<div id="lgfc_kick_user_output" style="display: none; margin-bottom: 5px;"></div>Reason: <input type="text" id="lgfc_kick_user_reason" />
    
    Expiration [day(s)]: <input type="text" id="lgfc_kick_user_duration" />
    
    <input type="button" value="Add" onclick="LGFC_KickUser(6)" class="button_submit" /> <input type="button" value="Close" onclick="LGFC_CloseModal()" class="button_submit" />')"><img src="http://localhost/smf/Themes/Toxic/images/admin/ban.gif" /></a><a title="Send private message (Fast)" onclick="LGFC_PrivateMessage()"><img src="http://localhost/smf/Themes/Toxic/images/icons/pm_read.gif" /></a></span></li><li><a href="http://localhost/smf/index.php?action=profile;u=5" style="color: ;" target="_new">Test 3</a>: test 3
    <span class="smalltext date">November 01, 2012, 07:52:05 pm</span><span><a title="Delete message" onclick="LGFC_OpenModal('<div id="lgfc_delete_message_output" style="display: none;"></div>Are you sure you want delete this message?
    
    <input type="button" value="Yes" onclick="LGFC_DeleteMessage(6)" class="button_submit" /> <input type="button" value="No" onclick="LGFC_CloseModal()" class="button_submit" />')"><img src="http://localhost/smf/Themes/Toxic/images/icons/delete.gif" /></a><a title="Kick user (Ban)" onclick="LGFC_OpenModal('<div id="lgfc_kick_user_output" style="display: none; margin-bottom: 5px;"></div>Reason: <input type="text" id="lgfc_kick_user_reason" />
    
    Expiration [day(s)]: <input type="text" id="lgfc_kick_user_duration" />
    
    <input type="button" value="Add" onclick="LGFC_KickUser(5)" class="button_submit" /> <input type="button" value="Close" onclick="LGFC_CloseModal()" class="button_submit" />')"><img src="http://localhost/smf/Themes/Toxic/images/admin/ban.gif" /></a><a title="Send private message (Fast)" onclick="LGFC_PrivateMessage()"><img src="http://localhost/smf/Themes/Toxic/images/icons/pm_read.gif" /></a></span></li><li><a href="http://localhost/smf/index.php?action=profile;u=4" style="color: ;" target="_new">Test 2</a>: test 2
    <span class="smalltext date">November 01, 2012, 07:51:47 pm</span><span><a title="Delete message" onclick="LGFC_OpenModal('<div id="lgfc_delete_message_output" style="display: none;"></div>Are you sure you want delete this message?
    
    <input type="button" value="Yes" onclick="LGFC_DeleteMessage(5)" class="button_submit" /> <input type="button" value="No" onclick="LGFC_CloseModal()" class="button_submit" />')"><img src="http://localhost/smf/Themes/Toxic/images/icons/delete.gif" /></a><a title="Kick user (Ban)" onclick="LGFC_OpenModal('<div id="lgfc_kick_user_output" style="display: none; margin-bottom: 5px;"></div>Reason: <input type="text" id="lgfc_kick_user_reason" />
    
    Expiration [day(s)]: <input type="text" id="lgfc_kick_user_duration" />
    
    <input type="button" value="Add" onclick="LGFC_KickUser(4)" class="button_submit" /> <input type="button" value="Close" onclick="LGFC_CloseModal()" class="button_submit" />')"><img src="http://localhost/smf/Themes/Toxic/images/admin/ban.gif" /></a><a title="Send private message (Fast)" onclick="LGFC_PrivateMessage()"><img src="http://localhost/smf/Themes/Toxic/images/icons/pm_read.gif" /></a></span></li><li><a href="http://localhost/smf/index.php?action=profile;u=1" style="color: #FF0000;" target="_new">System32</a>: Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?
    <span class="smalltext date">October 07, 2012, 10:06:25 pm</span><span><a title="Delete message" onclick="LGFC_OpenModal('<div id="lgfc_delete_message_output" style="display: none;"></div>Are you sure you want delete this message?
    
    <input type="button" value="Yes" onclick="LGFC_DeleteMessage(4)" class="button_submit" /> <input type="button" value="No" onclick="LGFC_CloseModal()" class="button_submit" />')"><img src="http://localhost/smf/Themes/Toxic/images/icons/delete.gif" /></a></span></li><li><a href="http://localhost/smf/index.php?action=profile;u=1" style="color: #FF0000;" target="_new">System32</a>: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
    <span class="smalltext date">October 07, 2012, 10:06:16 pm</span><span><a title="Delete message" onclick="LGFC_OpenModal('<div id="lgfc_delete_message_output" style="display: none;"></div>Are you sure you want delete this message?
    
    <input type="button" value="Yes" onclick="LGFC_DeleteMessage(3)" class="button_submit" /> <input type="button" value="No" onclick="LGFC_CloseModal()" class="button_submit" />')"><img src="http://localhost/smf/Themes/Toxic/images/icons/delete.gif" /></a></span></li><li><a href="http://localhost/smf/index.php?action=profile;u=2" style="color: #0000FF;" target="_new">Test</a>: G Mod test
    <span class="smalltext date">October 07, 2012, 09:48:59 pm</span><span><a title="Delete message" onclick="LGFC_OpenModal('<div id="lgfc_delete_message_output" style="display: none;"></div>Are you sure you want delete this message?
    
    <input type="button" value="Yes" onclick="LGFC_DeleteMessage(2)" class="button_submit" /> <input type="button" value="No" onclick="LGFC_CloseModal()" class="button_submit" />')"><img src="http://localhost/smf/Themes/Toxic/images/icons/delete.gif" /></a><a title="Kick user (Ban)" onclick="LGFC_OpenModal('<div id="lgfc_kick_user_output" style="display: none; margin-bottom: 5px;"></div>Reason: <input type="text" id="lgfc_kick_user_reason" />
    
    Expiration [day(s)]: <input type="text" id="lgfc_kick_user_duration" />
    
    <input type="button" value="Add" onclick="LGFC_KickUser(2)" class="button_submit" /> <input type="button" value="Close" onclick="LGFC_CloseModal()" class="button_submit" />')"><img src="http://localhost/smf/Themes/Toxic/images/admin/ban.gif" /></a><a title="Send private message (Fast)" onclick="LGFC_PrivateMessage()"><img src="http://localhost/smf/Themes/Toxic/images/icons/pm_read.gif" /></a></span></li>KgNrDz4FF100online_usersdFhz5s1TB
    

    Imaš i jednu teoretsku situaciju. Zamisli da želiš staviti auto u drugi auto (Ovo je OOP!?).
    I ako uzmeš principe OOP da jedan objekt ne smije imati nikakve veze ili čim manje veze sa drugim objektom, imaš situaciju da jedan tvoj objekt je isključivo vezan za stanje drugog objekta.
    Tako da u tvojoj situaciju ako je moguće u javascriptu da napraviš usporedbu (podatak.nesto === this){continue;}

    [quote=“gorrc”]Imaš i jednu teoretsku situaciju. Zamisli da želiš staviti auto u drugi auto (Ovo je OOP!?).
    I ako uzmeš principe OOP da jedan objekt ne smije imati nikakve veze ili čim manje veze sa drugim objektom, imaš situaciju da jedan tvoj objekt je isključivo vezan za stanje drugog objekta.
    Tako da u tvojoj situaciju ako je moguće u javascriptu da napraviš usporedbu (podatak.nesto === this){continue;}[/quote]

    Pa to sam i razmisljao da bi trebalo tako nekako rjesiti, ali nisam imao potrebu se s tim bavit. Osobno sam svjestan ograničenja, tj. kakvu konstrukciju objekta nesmijem parsirat…i još mi nije zatrebalo.

    @System32
    Pa napomenuo sam da je nečitljiv (tj. slabo čitljiv) u string obliku. Imaš u zaglavlju funkcija ovaj dio:

    tu bi mogao taj dummy text malo uljepsat. Ali moras biti svjestan da niti jedna vrijednost objekta, ili kljuc objekta kojeg zelis parsirat ne smije u sebi sadrzavat bilo koji od tih dummy tekstova. Zato i jesu takvi da bude mala vjerovatnost da se slucajno pojave. I naravno morao bi ih jednako promjeniti u sve 4 funkcije, dvije u js fileu i dvije u php fileu.


    Copyright © 2020 WM Forum - AboutContact - Sponsored by: Mydataknox & Webmaster.Ninja