Ajax

Programovacie jazyky, rady, poradňa...
Qip
Novice
Novice
Príspevky: 3
Registrovaný: 08 nov 2013, 13:50

Ajax

Príspevok od používateľa Qip »

Ahoj, som tu novy a dufam ze aj napriek tomu mi tu niekto poradi :) Prehladal som forum no stale neviem prist na riesenie. V Ajaxe som zaciatocnik, tak teda k teme.

Na webe sa snazim sprevadzkovat jednu funkciu, konkretne tlacitko. Po kliknuti sa otovri formular -> po vyplneni zacne script live prehladavat databazu -> az kym uzivatel nezrusi vyhladavanie.

Zhoda vyhladavania nastane az vtedy ked iny uzivatel spravi rovnaky postup a vyplni formular rovnako -> Obom uzivatelom vyskoci tabulka ze vyhladavanie bolo uspesne(zhoda).

Mozno je to len banalita, ale nemohol by ma prosim niekto aspon nasmerovat ktore funkcie si mam nastudovat aby sa mi to podarilo sprevadzkovat? Za kazdu radu velke diiik 8)
S-player
Light Star
Light Star
Príspevky: 277
Registrovaný: 23 júl 2011, 22:30

Re: Ajax

Príspevok od používateľa S-player »

Myslím si ,že nepopisuješ presne svoj problém a je trošku komplikovanejšie výjsť z tvojho popisu.

Nechápem prečo začne script prehľadávať databázu (Chápem to ako nejaký cyklus ,ktorý robí stále dookola tú istú vec tz. SELECT...). Veď keď user niečo vyplní a zašle tak to ulož do databázy a zobraz mu nejaký loading. Následne napríklad každú sekundu zasielaj nové query na DB a kontroluj či daná vec už existuje alebo nie. Ak existuje tak sa zobrazí alert ,že vyhľadávanie bolo úspešne ,ak neexistuje tak bude pokračovať script v zasielani dotazov. (http://www.w3schools.com/js/js_timing.asp)

Ak to chceš robiť za pomoci ajax tak potrebuješ toto: http://www.w3schools.com/ajax/ajax_intro.asp resp. ak používaš jQuery tak http://api.jquery.com/jQuery.ajax/

// Ak to chceš mať "premakanejšie" tak si pozri http://socket.io
awtt
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1234
Registrovaný: 01 nov 2006, 19:37
Bydlisko: San Francisco
Kontaktovať používateľa:

Re: Ajax

Príspevok od používateľa awtt »

Toto len za pomoci ajaxu nespravis, (ak nechces volat tie requesty v nejakom loope co je samovrazda) pozri si radsej socket.io.
S-player
Light Star
Light Star
Príspevky: 277
Registrovaný: 23 júl 2011, 22:30

Re: Ajax

Príspevok od používateľa S-player »

awtt napísal:Toto len za pomoci ajaxu nespravis, (ak nechces volat tie requesty v nejakom loope co je samovrazda) pozri si radsej socket.io.
Ale spraví.... Nemusí to volať v loop stači použiť timer ,na ktorý odkazujem vyššie.
Qip
Novice
Novice
Príspevky: 3
Registrovaný: 08 nov 2013, 13:50

Re: Ajax

Príspevok od používateľa Qip »

Pardon, lepsie sa mi nepodarilo vysvetlit co potrebujem ale vidim ze tebe ano :) Dakujem za pomoc, idem to skusit zriesit.

//autoeditácia príspevku (09 Nov 2013, 17:09)
No, riesil som ale nic sa mi nepodarilo vyriesit dokopy. Skusal som to s tym Javascriptom ale moje male skusenosti s programovanim moc nepomohli. Vytvoril som formular ktory som ulozil do databazy a zobrazil som searching. Nasledne som cez Select (Php) zacal vyhladavat ci sa formular v databaze nachadza a cez script som to kontroloval kazdu sekundu - A tu uz som sa dalej nepohol. Vobec neviem ako mam Javascript prepojit s Php aby mi to fungovalo :/

V kazdom pripade velke diik za pomoc. Snad sa mi to podari vyriesit.
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Ajax

Príspevok od používateľa pcsiete »

Takto celá vec sa dá rozdeliť do dvoch problémov:
  1. Získanie informácie o priebehu požiadavky na databázu
  2. Doručenie tejto informácie klientovi
Získať informáciu o priebehu požiadavky priamo od SQL databázy je možné len v obmedzenej miere. Informácia o priebehu vykonávania istých príkazov je uložená v tabuľke sys.dm_exec_requests, avšak zo zoznamu podporovaných príkazov je ich v bežnej aplikácii použiteľné minimum, ak vôbec niečo.
Opakovanie dotazov na rôzne časti dát sa môže zdať nepraktické a nepresné, no pokiaľ som sa dočítal, nesie to so sebou aj čiastočnú istotu že prípadné zlyhanie požiadavky nevynúti zopakovanie novej požiadavky aj na dátach, ktoré už raz spracované boli. Môžeš teda vykonávať svoju požiadavku na nejakom množstve alebo zlomku dát, a po každej požiadavke môžeš aktualizovať informáciu o priebehu operácie. Predpoklad je, že čím menšie budú celky s ktorými budeš v jednom momente pracovať, tým pomalšie bude vykonávanie celej operácie.

Doručenie informácie klientovi je ďalší problém. Overovanie stavu v intervale nemusí byť práve najlepší spôsob a rozhodne nemusí byť presný. Riešenie cez websokety, ktorými by sa najaktuálnejšia informácia dostala ku klientovi hneď po zmene bude asi v tvojom prípade najvhodnejšie. Nahradia pollovanie a dáta sa predajú v momente, keď serverová časť vytýči udalosť.
awtt
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1234
Registrovaný: 01 nov 2006, 19:37
Bydlisko: San Francisco
Kontaktovať používateľa:

Re: Ajax

Príspevok od používateľa awtt »

S-player napísal:
Ale spraví.... Nemusí to volať v loop stači použiť timer ,na ktorý odkazujem vyššie.
A aky je v tom rozdiel ? Ved stale sa mu tie requesty budu volat v loope...
(este najmenisie zlo z tohto riesenia je request animation frame)

Php s js prepojis napriklad tak ze si v php vygenerujes json feed ktory budes ajaxom volat.
Ja by som sa ale na tvojom mieste naozaj popozeral radsej po tych web socketoch.
S-player
Light Star
Light Star
Príspevky: 277
Registrovaný: 23 júl 2011, 22:30

Re: Ajax

Príspevok od používateľa S-player »

Min. polovica chatov takto funguje a nikomu to nevadi. Čo je natom hodiť do intervalu nejakú funkciu ,ktorá bude zasielať požiadavku na server každú sekundu, dva alebo tri...? Dovolím si zatipovať ,že jeho službu nebude využivať tisíce ľudí takže to je jedno + Pokiaľ má klient čakať len pár sekúnd možno minút tak to je naozaj úplne jedno.

Ak má problém s týmto Ajax riešením čo je úplne jednoduché už ho vidím ako si to zbúcha za pomoci socketov.

// Pokiaľ bude zasielať request na .php (Príklad GET "xyz") tak nepotrebuje riešiť ani JSON. Stači ,že si dá v .php vypísať "founded" alebo niečo na tento štýl...aj keď zaslať si JSON je o niečo elegantnejšie {founded: true}.
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Ajax

Príspevok od používateľa pcsiete »

S-player napísal:Min. polovica chatov takto funguje a nikomu to nevadi. Čo je natom hodiť do intervalu nejakú funkciu ,ktorá bude zasielať požiadavku na server každú sekundu, dva alebo tri...? Dovolím si zatipovať ,že jeho službu nebude využivať tisíce ľudí takže to je jedno + Pokiaľ má klient čakať len pár sekúnd možno minút tak to je naozaj úplne jedno.
Ono vadí to, a to z viacerých dôvodov. Prvou nevýhodou je strácanie času odpovedaním na dopyty. Druhou je to, že dáta neprichádzajú v reálnom čase ale v intervaloch a naraz. A treťou je návrh aplikácie:
  1. V databáze sa musia uskladňovať dáta o vyhotovení požiadavky.
  2. Informácia o postupe v spracovávaní sa musí uložiť do databázy
  3. Informácia o postupe sa musí v databáze skontrolovať, potom vybrať.
Jednoducho, pre stav spracovávania zbytočne vytváraš tretí bod (1-klient, 2-serv. skript na dopyty) ktorý spomaľuje beh a vyžaduje priestor.
Ak má problém s týmto Ajax riešením čo je úplne jednoduché už ho vidím ako si to zbúcha za pomoci socketov.
Tak mu radšej poraďme aby naprogramoval "jednoduchý" nerozšíriteľný kód ktorý sa mu bude ťažko debugovať.
A mimo, sockety mi prídu ako úplne jednoduché a prehľadné riešenie na ktoré existuje kopec návodov a dokumentácie.
// Pokiaľ bude zasielať request na .php (Príklad GET "xyz") tak nepotrebuje riešiť ani JSON. Stači ,že si dá v .php vypísať "founded" alebo niečo na tento štýl...aj keď zaslať si JSON je o niečo elegantnejšie {founded: true}.
A čo ak chce vypísať postup alebo stav, znova: aby to bolo aj z dlhodobého hľadiska použiteľné, rozšíriteľné a funkčné?
Qip
Novice
Novice
Príspevky: 3
Registrovaný: 08 nov 2013, 13:50

Re: Ajax

Príspevok od používateľa Qip »

No, spravil som na rychlo screeny ako by malo teoreticky vyzerat to, o co sa snazim, nech je moja ziadost o pomoc zrozumitelnejsia. A ta zhoda v databaze nastane, ked niekto iny vyplni ten formular rovnako. Ja len potrebujem vediet, co si mam teda naozaj nastudovat, nech sa mi to podari dat dohromady co najskor :))
Prílohy
Screen1
Screen1
Screen2
Screen2
Screen3
Screen3
Screen4
Screen4
S-player
Light Star
Light Star
Príspevky: 277
Registrovaný: 23 júl 2011, 22:30

Re: Ajax

Príspevok od používateľa S-player »

Spoiler
pcsiete napísal: Ono vadí to, a to z viacerých dôvodov. Prvou nevýhodou je strácanie času odpovedaním na dopyty. Druhou je to, že dáta neprichádzajú v reálnom čase ale v intervaloch a naraz. A treťou je návrh aplikácie:
  1. V databáze sa musia uskladňovať dáta o vyhotovení požiadavky.
  2. Informácia o postupe v spracovávaní sa musí uložiť do databázy
  3. Informácia o postupe sa musí v databáze skontrolovať, potom vybrať.
Jednoducho, pre stav spracovávania zbytočne vytváraš tretí bod (1-klient, 2-serv. skript na dopyty) ktorý spomaľuje beh a vyžaduje priestor.


Tak mu radšej poraďme aby naprogramoval "jednoduchý" nerozšíriteľný kód ktorý sa mu bude ťažko debugovať.
A mimo, sockety mi prídu ako úplne jednoduché a prehľadné riešenie na ktoré existuje kopec návodov a dokumentácie.


A čo ak chce vypísať postup alebo stav, znova: aby to bolo aj z dlhodobého hľadiska použiteľné, rozšíriteľné a funkčné?
Neviem či rozumiem zle teba alebo jeho požiadavku. V každom prípade je mi úplne jasné ,že dáta neprídu v reálnom čase keď prídu ,ale o sekundu neskôr tak to snaď (Pre neho) nebude žiaden problém. Taktiež mi je jasné ,že sockety sú lepšim riešením, ja si len myslím ,že on ich až tak celkom nepotrebuje...

- [10:35:05] Klient A zašle vyplnení form s povedzme content = "abc" ten sa sejvne do DB pod userId
- [10:35:06] Klient A čaká na klienta B (Kontroluje či sa v DB vyskytujú zhodné dáta...)
- [10:35:06] Klient B sejvne do DB svoje dáta ,ktoré sú zhodné s content="abc" a je mu možne okamžite odoslať odpoveď ,že v DB sa už nachádzajú rovnaké dáta.
- [10:35:07] Klient A zašle ďalšiu požiadavku na kontrolu. V DB sa už vyskytujú rovnaké dáta čiže dostane taktiež pozitívnu odpoveď.

*Možno mi niečo uniká (Nebol by odveci lepši popis). Jedine čo treba uložiť do DB je obsah formulárov a ten tam treba uložiť tak či onak. Čo sa týka stavov tak koľko ich môže nastať?
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Ajax

Príspevok od používateľa pcsiete »

S-player napísal: - [10:35:05] Klient A zašle vyplnený form s povedzme content = "abc" ten sa sejvne do DB pod userId
- [10:35:06] Klient A čaká na klienta B (Kontroluje či sa v DB vyskytujú zhodné dáta...)
- [10:35:06] Klient B sejvne do DB svoje dáta ,ktoré sú zhodné s content="abc" a je mu možne okamžite odoslať odpoveď ,že v DB sa už nachádzajú rovnaké dáta.
- [10:35:07] Klient A zašle ďalšiu požiadavku na kontrolu. V DB sa už vyskytujú rovnaké dáta čiže dostane taktiež pozitívnu odpoveď.
Alebo vytvoríš len jeden WebSocket server na ktorý sa bude klient napájať. Priamo v pamäti sa môže držať zoznam čakajúcich hráčov a databázu môžeš vynechať (značné zrýchlenie veci). Sockety nie sú len alternatíva, ale aj nutnosť.
S-player napísal: *Možno mi niečo uniká (Nebol by odveci lepši popis). Jedine čo treba uložiť do DB je obsah formulárov a ten tam treba uložiť tak či onak. Čo sa týka stavov tak koľko ich môže nastať?
Do DB netreba ukladať nič mimo dát, ktoré zostanú na dobu neurčitú. Stavov môže nastať mnoho, napr. že je užívateľ idle ale hra sa rozbieha, príp. že užívateľ uvidí že je spárovaný s hráčom s ktorým nechce a bude to chcieť zrušiť.

//autoeditácia príspevku (10 Nov 2013, 17:30)
V tomto príklade použijem 3rd-party knižnicu na WebSockets v PHP.

Kód: Vybrať všetko

<?php
//potrebné pre knižnicu Ratchet
require __DIR__ . '/vendor/autoload.php';
use Ratchet\Server\IoServer;
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;

$server = IoServer::factory(new ClientConnection(), 8080); //prijímaj pripojenia na porte 8080, predávaj ich instanciám triedy ClientConnection
$server->run(); //očakávaj pripojenia

$queue = array(); //do $queue sa budú ukladať pripojenia a ich nastavenia čo sa týka hry ktorú chcú hrať
class ClientConnection implements MessageComponentInterface {
	public function onOpen(ConnectionInterface $conn) {
		$conn->send(json_encode(array("status" => "Connected"))); //informuj klienta správou, že sme prijali pripojenie
		array_push($queue, array("connection" => $conn)); //ulož si klienta v zozname
    }

    public function onMessage(ConnectionInterface $from, $msg) {
		$arr = json_decode($msg, true); //dekóduj JSON dáta
		if($arr['action']=="find") { //klient chce začať vyhľadávať hráčov na spárovanie
			$from->send(json_encode(array("status" => "Looking for match"))); //začíname hľadať
			//hľadaj zhodu na spárovanie v $queue
			$from->send(json_encode(array("status" => "Match found"))); //ak sme našli zhodu, informuj klienta
                        //pošli informácie o zhode klientovi
                        //ak sa zhoda nenašla, neinformuj klienta pokým sa nenájde
			for(...) {
				if(/*ľudia ktorí hľadajú spoločnú hru (v istom limite)*/)
					$queue[$i]['connection']->send(array("status" => "Match found"))); /*informuj o nájdení zhody*/
			}
		} else if($arr['action']=="cancel") { //klient chce byť vymazaný zo zoznamu čakajúcich
			//vymaž z queue
			for($i = count($queue);i > 0;i--) {
				if($queue[i]['ip']==/*nejaký identifikátor, najlepšie niečo unikátne v hashi*/)
				unset($queue[i]);
				break;
			}
		}
    }

    public function onClose(ConnectionInterface $conn) {
		/*vymaž z $queue*/
    }

    public function onError(ConnectionInterface $conn, \Exception $e) {
		/*ak sa dá, upozorni, a vymaž z queue*/
    }
}
?>
JavaScript

Kód: Vybrať všetko

var socket;
$("#search").click(function() { //po kliknutí na tlačidlo vyhľadávať sa ...
	var socket = new WebSocket("ws://serv.er:8080/server"); //pripoj sa na server na port 8080
	socket.onopen = function() {
		//stav sa môže niekde uložiť
	}
	socket.onmessage = function(msg) { //dostali sme správu od serveru
		var response = JSON.parse(msg); //nebodaj nám konečne našiel nejakú zhodu?
		if(response.status=="Connected") { //nie, smola.
			//pripojenie bolo úspešné
		} else if(response.status=="Match found") { //á! presne toto chceme!
			//našla sa zhoda
		} else if(response.status=="Looking for match") {
			//informuj užívateľa že sa hľadá zhoda
		}
	}
	socket.send(JSON.stringify({"action": "find"})); //povedz serveru, že chceme začať vyhľadávať
});

$("#cancel").click(function() {
	socket.send(JSON.stringify({"action": "cancel"})); //nie, už nemáme záujem o túto hru
});
S-player
Light Star
Light Star
Príspevky: 277
Registrovaný: 23 júl 2011, 22:30

Re: Ajax

Príspevok od používateľa S-player »

OK, ale tak veci ,ktoré popisuješ nikde nenapísal Qip. Nikde nebolo napísane ,že nieje absolútne potrebné ukladať dáta formulárov a o tej hre tu toho tiež nebolo veľa popísaneho. V každom prípade pozerám ,že už si mu postol nejaký zdroják tak snaď mu to bude klapať tak ako chcel...
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Ajax

Príspevok od používateľa pcsiete »

S-player napísal:OK, ale tak veci ,ktoré popisuješ nikde nenapísal Qip. Nikde nebolo napísane ,že nieje absolútne potrebné ukladať dáta formulárov a o tej hre tu toho tiež nebolo veľa popísaneho. V každom prípade pozerám ,že už si mu postol nejaký zdroják tak snaď mu to bude klapať tak ako chcel...
Alebo "vyplynulo (môže platiť), že je absolútne potrebné ukladať dáta" (¬(¬A)) - Kde?
Čo som napísal a nenapísal (resp. nezobrazil v obrázkoch) Qip?
NinXx
Novice
Novice
Používateľov profilový obrázok
Príspevky: 5
Registrovaný: 20 nov 2013, 17:37

Re: Ajax

Príspevok od používateľa NinXx »

Snad neotvaram priserne staru temu ale toto by ma zaujimalo. Do programovania moc nevidim ale takato funkcia by sa mi tiez hodila. Mohol by mi niekto s tym pomoct?

Cize:

1.
require __DIR__ . '/vendor/autoload.php';
funkcia require pokial viem subor vyvolava. Cize mam vytvorit subor autoload.php a dat tam nejaky kod?

2. v kode vidim
use Ratchet\Server\IoServer;
cize do mojho Ftpcka mam nahrat tieto subory? https://github.com/cboden/Ratchet

3. JavaScript subor
var socket = new WebSocket("ws://serv.er:8080/server");
tomuto nerozumiem. Mal by som tam napisat v mojom pripade url mojho webu kde sa nachadza ten Ratchet?

4. Podla guuglu mozem pisat JavaScript do toho isteho suboru ako Php, mam to tak spravit (cize aby to vsetko bolo v jednom subore)? A este jedna pod otazka. Pokial tam chcem vlozit nejaky FORM, cize formular podla ktoreho ma ten kod vyhladavat zhodu, do ktoreho riadku to mam pastnut?

5.
V tomto príklade použijem 3rd-party knižnicu na WebSockets v PHP.
To je tiez nejaka kniznica ktoru mam stiahnut ako Ratchet?
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Ajax

Príspevok od používateľa pcsiete »

NinXx napísal:Snad neotvaram priserne staru temu ale toto by ma zaujimalo. Do programovania moc nevidim ale takato funkcia by sa mi tiez hodila. Mohol by mi niekto s tym pomoct?

Cize:

1. funkcia require pokial viem subor vyvolava. Cize mam vytvorit subor autoload.php a dat tam nejaky kod?

2. v kode vidim cize do mojho Ftpcka mam nahrat tieto subory? https://github.com/cboden/Ratchet
Samotný Ratchet ešte používa ďalšie knižnice, ktoré potrebuješ stiahnuť aby ti to všetko bežalo (a všetky musia mať zhodné verzie). Pre to sa na inštaláciu používa doplnok composer (návod pre Ratchet je tu). V momente keď rozbehneš install na localhoste, stiahne sa ti všetko do priečinku v počítači a potom to spolu so svojím kódom dáš na FTP. Súbor "vendor/autoload.php" je vytvorený pri inštalácii composerom a všetky knižnice ktoré si dal cez composer nainštalovať sa ti vložia cez neho. V tom momente dostaneš prístup k menným priestorom a Ratchet\Server\IoServer bude medzi nimi. (popis, dokumentácia)
NinXx napísal: 3. JavaScript subor tomuto nerozumiem. Mal by som tam napisat v mojom pripade url mojho webu kde sa nachadza ten Ratchet?
Ako parameter pre triedu WebSocket dávaš URL, čiže (schémou) protokolom je WebSocket protocol ("ws"), adresou (hierarchická časť) je doména/IP serveru, port je 8080 a musí sa zhodovať s

Kód: Vybrať všetko

$server = IoServer::factory(new ClientConnection(), 8080);

4. Podla guuglu mozem pisat JavaScript do toho isteho suboru ako Php, mam to tak spravit (cize aby to vsetko bolo v jednom subore)?
na umiestnení javascriptu voči php nezáleží, záleží na URL.
A este jedna pod otazka. Pokial tam chcem vlozit nejaky FORM, cize formular podla ktoreho ma ten kod vyhladavat zhodu, do ktoreho riadku to mam pastnut?
Form daj tam kde má byť v html, len na submit nastav aby sa nevykonala akcia, ale spustila metóda, ktorá bude komunikovať cez websockety.
5. To je tiez nejaka kniznica ktoru mam stiahnut ako Ratchet?
Nie, u klienta ti to podporuje prehliadač.
NinXx
Novice
Novice
Používateľov profilový obrázok
Príspevky: 5
Registrovaný: 20 nov 2013, 17:37

Re: Ajax

Príspevok od používateľa NinXx »

Dakujem moc ze mi to vysvetlujes :)
Form daj tam kde má byť v html, len na submit nastav aby sa nevykonala akcia, ale spustila metóda, ktorá bude komunikovať cez websockety.
Nemohol by si mi prosim trosku priblizit ako mam nastavit tu metodu aby to komunikovalo?
<html>
<body>

<form action="" method="get">
Name: <input type="text" name="name"><br>
<input type="submit" name="search" value="search"> /*snazil som sa tam zadavat bud SEARCH alebo FIND ako su uvedene funkcie v JavaScripte*/
</form>

</body>
</html>
//Edit:
moje Php skusenosti (3 dni ucenia) nestacia na vytvorenie tejto funkcie :/ az teraz som si vsimol ze tie komentare k funkciam neoznacuju len co robi kod. Ale aj tam treba doplnat veci a to uz ja nemam predstavu co tam mam dopisat. Napriklad:
if($queue['ip']==/*nejaký identifikátor, najlepšie niečo unikátne v hashi*/)/*myslis napr. ID usera?*/

alebo
for(...) { /*tie 3 bodky, co tam ma byt? lebo web mi pise ze je to chyba*/
if(/*ľudia ktorí hľadajú spoločnú hru (v istom limite)*/) /* tu uz totalne neviem co mozem dopisat :/ */
$queue[$i]['connection']->send(array("status" => "Match found"))); /*informuj o nájdení zhody*/
}

Heh, snazil som sa len spravit to, ze staci zadat do formy nejake slovo a druhy clovek ked ho tiez napise tak obom sa vypise nejaky error (napr. ten "Match found"). Takuto funkciu budem schopny spravit asi az po mesiaci ucenia. V kazdom pripade, diik za pomoc, tie kody si ulozim :)
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Ajax

Príspevok od používateľa pcsiete »

Tu máš ľahší príklad:

HTML:

Kód: Vybrať všetko

<!-- bez formulára -->
<div id="connect">
    .....
    <input type="text" id="moje_meno" />
    <button onclick="pripoj()">Pripoj sa</button>
</div>
<div id="search">
    .....
    <input type="text" id="hladane_meno" />
    <button onclick="vyhladavaj()">Vyhľadaj</button>
</div>
<div id="status">
	Žiadna aktivita.
</div>
JS:

Kód: Vybrať všetko

var socket;
function pripoj() {
	socket = new WebSocket("ws://adresa:8080");
	socket.onopen = function() {
		$("#status").html("Pripájam sa");
		socket.send("PRIPOJ " + $("#moje_meno").attr('value'));
	}
}
function vyhladavaj() {
	var data = false;
	socket.onmessage = function(evt) {
		if(data) {
			$("#status").html("Nájdená zhoda, ID:" + evt.data);
		} if(evt.data=="ZHODA") {
			data = true;
		} else (evt.data=="NIC") {
			$("#status").html("Nebola nájdená žiadna zhoda");
		}
	}
	
	socket.send("HLADAJ " + $("#hladane_meno").attr('value'));
}
PHP:

Kód: Vybrať všetko

<?php
//potrebné pre knižnicu Ratchet
require __DIR__ . '/vendor/autoload.php';
use Ratchet\Server\IoServer;
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;

$server = IoServer::factory(new ClientConnection(), 8080); //prijímaj pripojenia na porte 8080, predávaj ich instanciám triedy ClientConnection
$server->run(); //očakávaj pripojenia

$hraci = array();
$id = 0;
class ClientConnection implements MessageComponentInterface {
    public function onMessage(ConnectionInterface $from, $msg) {
		$arr = explode(" ", $msg);
		switch($arr[0]) {
			case "PRIPOJ":
				array_push($hraci, array('id' => $id, 'meno' => $arr[1]));
				$id++;
				break;
			case "HLADAJ":
				$found = false;
				foreach($hraci as $hrac)
					if($hrac['meno']==$arr[1]) {
						$found = true;
						$from->send("ZHODA");
						$from->send("".$hrac['id']);
						break;
					}
				
				if(!$found)
					$from->send("NIC");
				break;
		}
    }
}
?>
moje Php skusenosti (3 dni ucenia) nestacia na vytvorenie tejto funkcie :/ az teraz som si vsimol ze tie komentare k funkciam neoznacuju len co robi kod.
Pohľadaj si knižku, niečo vyskúšaj...
Napísať odpoveď