Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

jAPI Project - Direct call PHP methods from JavaScript

[es] :: PHP :: jAPI Project - Direct call PHP methods from JavaScript

[ Pregleda: 2212 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Vladica Savić
Software Developer
Toronto, Canada

Član broj: 26699
Poruke: 654



+5 Profil

icon jAPI Project - Direct call PHP methods from JavaScript27.06.2010. u 09:33 - pre 168 meseci
Inspirisan Ext Direct-om i nacinom na koji mogu da se pozivaju server metode direktno sa klijentske (JavaScript) strane palo mi je na pamet da napisem svoju (besplatnu) verziju, nazvao sam je inace jAPI, koja nece zavisiti od ExtJS framework-a i uz pomoc koje ce moci da se pozivaju PHP metode direktno kroz good old "cist" javascript.

Sta je sve potrebno za jAPI?

Najpre je potrebno da u svoju index.html (ili bilo koju drugu html stranu) ucitate odgovarajuce skripte jAPI.js, jAPI-Remote.php.
jAPI-Remote.php u sustini moze da bude bilo koja php skripta cije public metode zelite da pozivate kroz javascript.

Tako da bi html kod koji se tice tog dela trebao da izgleda ovako:
Code (html):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

        <!-- jQuery is optional, you dont have to use it, but I reccommend it to you -->
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>

        <script type="text/javascript" src="js/jAPI.js"></script>
        <script type="text/javascript" src="jAPI-Remote.php"></script>
    </head>
    <body></body>
</html>
 


Obzirom da se komunikacija izmedju klijentske i serverske strane vrsi asinhrono ostavio sam mogucnost u jAPI.js -u da moze da se koristi i jQuery ajax tako da je ukljucivanje jQuery biblioteke opciono.

Kao sto rekoh, jAPI-Remote.php moze da bude bilo koja php skripta cije public metode zelite da pozivate kroz javascript, ali da bi to mogli da ucinite potrebno je ukljuciti jAPI-Core.php, i da prilikom instanciranja jAPIBaseClass-a na kraju vase skripte kao parametar navedete imena klasa cije metode zelimo da pozivate.

Jedan od primera kako bi recimo jAPI-Remote.php skript mogao da izgleda:
Code (php):

<?php
//Include jAPI Core and jAPIBaseClass
include("httpHandler/jAPI-CORE.php");

//Bellow is some demo classes with some basic functions
class MySimpleMath {
    public function Addition($firstParam, $seccondParam) {
        $sum = $firstParam+$seccondParam;
        echo $sum;
    }
    public function CompareNumbers($firstNum, $seccondNum) {
        $comparingResults = ($firstNum == $seccondNum)?"The numbers are equal":"The number is not equal";
        echo $comparingResults;
    }
}
class MyStringMixer {
    public function ReverseString($inputString) {
        echo strrev($inputString);
    }
    public function JustSayHi() {
        echo "Hello world!";
    }
}

//Create new instance of jAPIBaseClass with names of all classes that you want to use separeted with comma...
new jAPIBaseClass('MySimpleMath,MyStringMixer');
?>
 


I, to bi bilo to :)

Nakon svega ovoga, mozete pozivati kroz javascript direktno public php metode klasa koje ste ekstendovali jAPIBaseClass klasom.

Primer koriscenja:
Code (html):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

        <!-- jQuery is optional, you dont have to use it, but I reccommend it to you -->
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>

        <script type="text/javascript" src="js/jAPI.js"></script>
        <script type="text/javascript" src="jAPI-Remote.php"></script>
    </head>
    <body>
        <script>
            MySimpleMath.Addition(555,2);
            MySimpleMath.CompareNumbers(23,55);
            MyStringMixer.ReverseString("This is a test...");
            MyStringMixer.JustSayHi();
        </script>
    </body>
</html>
 


Ceo funkcionalan primer, zajedno sa skriptama koje nisu ovde navedene (jAPI.js i jAPI-Core.php) mozete preuzeti ovde

...naravno, verovatno sam negde nesto i prevideo, ali svakako bi bilo zanimljivo cuti i vasa misljenja, i eventualne predlog (konstruktivne) kako poboljsati ovo.

Pozdrav ;)

[Ovu poruku je menjao Vladica Savić dana 27.06.2010. u 18:26 GMT+1]
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-1.sezampro.yu.



+33 Profil

icon Re: jAPI Project - Direct call PHP methods from JavaScript27.06.2010. u 10:02 - pre 168 meseci
Video sam i tvoj post vezan za ExtDirect na JS/AJAX forumu, i smatram da je to jako zanimljiva i obećavajuća novina u JS svetu. Mene je sve to malo podsetilo na arhitekrutu jednog npr. REST web servisa, kod kojeg se kroz HTTP zahtev trigger-uje određena metoda nekog servis provajdera.

Kod ove tvoje varijante mi se između ostalog ne sviđa i to što se PHP skript include-uje kao JS fajl (<script type="text/javascript" src="jAPI-Remote.php"></script>), tačnije, nekako mi je neobičan takav pristup, al' izgleda da prosto mora tako.

[Ovu poruku je menjao Nikola Poša dana 27.06.2010. u 12:31 GMT+1]
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: jAPI Project - Direct call PHP methods from JavaScript27.06.2010. u 10:19 - pre 168 meseci
Lepo, hvala što si podelio kod sa nama. Je li kod u javnom vlasništvu ili želiš da ga objaviš pod nekom slobodnom licencom?

Ne vidim zašto pozivaš json_encode/decode između jAPIBaseClass::GetReflection() i metoda koji je pozivaju. Ova funkcija može da vrati običan niz, a ako želiš da podeliš te podatke sa klijentom uvek možeš da ih serijalizuješ u json u toj metodi koja je javna. Isti obrazac se sreće još na par mesta u kodu.

Nisi objasnio da konstruktor klase izvedene iz jAPIBaseClass vraća JavaScript deklaraciju deljenih (javnih) metoda klase. Ne razumem i zašto tvoji objekti nasleđuju jAPIBaseClass kada kasnije u kodu praviš upravo instancu te (ne-apstraktne-iako-joj-ime-kaže-suprotno) klase?

Rešenje deluje previše uvezano, nemoguće je koristiti ga kao drop-in u nekom postojećem OOP kodu. Glavne mane koje vidim su da ne podržava izvršavanje metoda nad objektom čim dozvoljava pokretanje funkcija, a ne upravljanje objektom.

Bilo bi logičnije da razdvojiš objavljivanje JavaScript interfejsa i PHP dispatcher koji prima zahtev iz JavaScripta i izvršava metodu. Onda bi mogao da imaš neku include() funkciju definisanu u JavaScriptu i izbegneš ovo što Nikoli smeta.


PS - Poruka nije u skladu sa tačkom 7 pravilnika foruma. Ja bih ostavio dva poslednja primera, a rečima i/ili deklaracijama metoda bez definicije opisao klase jAPIBaseClass i jAPIJS. Ova helper klasa deluje na prvi pogled suvišna. Probaj da to ispraviš.
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

Vladica Savić
Software Developer
Toronto, Canada

Član broj: 26699
Poruke: 654



+5 Profil

icon Re: jAPI Project - Direct call PHP methods from JavaScript27.06.2010. u 10:48 - pre 168 meseci
@Nikola, @Gorane
Hvala najpre na brzim odgovorima.

Citat:

Ne razumem i zašto tvoji objekti nasleđuju jAPIBaseClass kada kasnije u kodu praviš upravo instancu te (ne-apstraktne-iako-joj-ime-kaže-suprotno) klase?


To je visak koda koji se provukao, a koji sam zaboravio da izbacim nakon nekih izmena koje sam pravio u hodu :)

Citat:

Bilo bi logičnije da razdvojiš objavljivanje JavaScript interfejsa i PHP dispatcher koji prima zahtev iz JavaScripta i izvršava metodu. Onda bi mogao da imaš neku include() funkciju definisanu u JavaScriptu i izbegneš ovo što Nikoli smeta.


Nisam siguran da sam najbolje razumeo sta si hteo da kazes... mozes malo detaljnije?

Citat:

PS - Poruka nije u skladu sa tačkom 7 pravilnika foruma.


Sto se ovog dela tice, nije problem, kao moderatori slobodno modifikujte ako mislite da treba post, ali ne vidim zasto bi to bio problem.
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-1.sezampro.yu.



+33 Profil

icon Re: jAPI Project - Direct call PHP methods from JavaScript27.06.2010. u 12:03 - pre 168 meseci
Sad sam malo detaljnije gledao taj tvoj PHP kod (prvi put se nisam nešto udubljivao u njega ), i zaključak je, kao što reče i Goran, da to nije rešeno baš na najelegantniji način, i da to nije ono što se zove "najbolja praksa" pisanja koda. Poređenja radi, pogledao sam kôd onog PHP backend-a za Ext.Direct (http://www.phpclasses.org/browse/file/30763.html), kojeg si spomenuo u istom onom post-u na temi o ExtJS-u, i u njemu su mi stvari nekako dosta logičnije... Postoji ta osnovna klasa (koja je zaista apstraktna), iz koje treba da se izvede tvoj provajder, zatim tu su dva wrapper-a za zahtev i odgovor, a onda i taj glavni kontroler, koji handle-uje Ext.Direct poziv. Ni kod tog backend-a stvari nisu savršene, ali to bi recimo bio neki pattern kojim si trebao da se vodiš pri pisanju te serverske podrške za Ext.Direct. A i naravno, ovo tvoje je verovatno tek neka alfa verzija, i normalno da tu u početku ima dosta stvari koje se mogu prepraviti, tako da verujem da će već u narednom release-u to biti mnogo bolje.
 
Odgovor na temu

[es] :: PHP :: jAPI Project - Direct call PHP methods from JavaScript

[ Pregleda: 2212 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.