18
Ajax Neophodno je za razumevanje narednog teksta da se poznaju neke stvari iz PHP-a $_SERVER['PHP_SELF'] Prikazuje ime tekućeg fajla Gdesam.php <!DOCTYPE html> <html> <body> <?php echo $_SERVER['PHP_SELF']; ?> </body> </html> PHP $_REQUEST PHP $_REQUEST se koristi za prikupljanje podataka nakon sabmitovanja neke HTML forme. Neophodno.php <html> <body> <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>"> Unesi ime: <input type="text" name="ime"> <input type="submit" value="OK"> </form> <?php

Ajax - MATKOSmatkos.in.rs/kurs/stvari/Ajax.pdf · moguće da se apdejtuje deo web stranice a da se ne riloaduje čitava stranica. Svi moderni brauzeri ... Osobina Opis onreadystatechange

  • Upload
    ngothu

  • View
    215

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Ajax - MATKOSmatkos.in.rs/kurs/stvari/Ajax.pdf · moguće da se apdejtuje deo web stranice a da se ne riloaduje čitava stranica. Svi moderni brauzeri ... Osobina Opis onreadystatechange

Ajax

Neophodno je za razumevanje narednog teksta da se poznaju neke stvari iz PHP-a

$_SERVER['PHP_SELF'] Prikazuje ime tekućeg fajla

Gdesam.php

<!DOCTYPE html>

<html>

<body>

<?php

echo $_SERVER['PHP_SELF'];

?>

</body>

</html>

PHP $_REQUEST

PHP $_REQUEST se koristi za prikupljanje podataka nakon sabmitovanja neke HTML forme.

Neophodno.php

<html>

<body>

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">

Unesi ime: <input type="text" name="ime">

<input type="submit" value="OK">

</form>

<?php

Page 2: Ajax - MATKOSmatkos.in.rs/kurs/stvari/Ajax.pdf · moguće da se apdejtuje deo web stranice a da se ne riloaduje čitava stranica. Svi moderni brauzeri ... Osobina Opis onreadystatechange

if ($_SERVER["REQUEST_METHOD"] == "POST") {

// prikuplja podatke iz input polja

$ime = $_REQUEST['ime'];

if (empty($ime)) {

echo "Ime je prazno";

} else {

echo 'Uneli ste ime:'.$ime;

}

}

?>

</body>

</html>

U ovom primeru imamo formu sa sabmit dugmetom. Kada korisnik klikne na Submit I time

potvrdi unete podatke forma forma podatke šalje na obradu kako je navedeno u formi. Međutim

u ovom primeru ne ide se nigde, već se ostaje na istoj strani i nastavlje sa izvršavanjem PHP

skripta. Dakle, kako stoji u daljem programu, nakon unetih i potvrđenih podataka prikazuje se na

ekranu zadato ime.

Dobardan.php

<!DOCTYPE html>

<html>

<body>

<?php

echo stristr("Dobar dan!","dan");

?>

</body>

Page 3: Ajax - MATKOSmatkos.in.rs/kurs/stvari/Ajax.pdf · moguće da se apdejtuje deo web stranice a da se ne riloaduje čitava stranica. Svi moderni brauzeri ... Osobina Opis onreadystatechange

</html>

AJAX Uvod

AJAX je nešto kao apdejtovanje dela web stranice bez riloadovanja cele stranice.

Šta je AJAX?

AJAX = Asinhroni JavaScript i XML.

AJAX je tehnika za kreiranje dinamičkih web stranica.

AJAX omogućava da se web stranica apdejtuje asinhrono razmenom male količine podataka sa

serverom iza scene. To znači da je moguće da se apdejtuju delovi web stranice, bez riloadovanja

cele stranice.

Klasična web stranica, (koja ne koristi AJAX) mora cela da se riloaduje ukoliko treba da se bilo

šta izmeni na njoj.

Primeri za korišćenje AJAX: Google Mape, Gmail, Youtube, i Facebook tabovi.

Kako AJAX RADI

Page 4: Ajax - MATKOSmatkos.in.rs/kurs/stvari/Ajax.pdf · moguće da se apdejtuje deo web stranice a da se ne riloaduje čitava stranica. Svi moderni brauzeri ... Osobina Opis onreadystatechange

AJAX je baziran na Internet Standardima

AJAX je baziran na internet standardima, ikoristi kombinaciju:

XMLHttpRequest objekta (za asinhronu razmenu podataka sa serverom)

JavaScript/DOM (za prikaz/interakciju sa informacijama)

CSS (za stilizovanje podataka)

XML (često korišćeno kao format za razmenu podataka)

AJAX aplikacije su što se tiče brauzera I platform nezavisni!

Google Sugestije

AJAX je postao popularan 2005 zbog Google, I Google Suggest.

Google Suggest koristi AJAX za kreiranje vrlo dinamičkih web interfejsova: Kada počnete da

kucate u Googlov search box, JavaScript šalje slova server I server vraća listu predloga.

Page 5: Ajax - MATKOSmatkos.in.rs/kurs/stvari/Ajax.pdf · moguće da se apdejtuje deo web stranice a da se ne riloaduje čitava stranica. Svi moderni brauzeri ... Osobina Opis onreadystatechange

U ovom PHP tutorijalu, pokazaćemo kako AJAX može da apdejtuje deo web stranice, bez

riloadovanja čitave stranice. Serverski script biće napisan u PHP-u.

PHP - AJAX i PHP

AJAX se koristi u mnogim interaktivnim aplikacijama.

AJAX PHP primer

Sledeći primer će pokazati kako web stranica može komunicirati sa web serverom dok korisnik

kuca znakove u nekom input polju.

Spisakucenika.php

<!DOCTYPE html>

<html>

<head>

<script>

function dajPredlog(str) {

if (str.length == 0) {

document.getElementById("sviucenici").innerHTML = "";

return;

} else {

var xmlhttp = new XMLHttpRequest();

xmlhttp.onreadystatechange = function() {

if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {

document.getElementById("sviucenici").innerHTML = xmlhttp.responseText;

}

}

xmlhttp.open("GET", "predlozi.php?q="+str, true);

Page 6: Ajax - MATKOSmatkos.in.rs/kurs/stvari/Ajax.pdf · moguće da se apdejtuje deo web stranice a da se ne riloaduje čitava stranica. Svi moderni brauzeri ... Osobina Opis onreadystatechange

xmlhttp.send();

}

}

</script>

</head>

<body>

<p><b>Počni da kucaš neko ime u polju za unos teksta ispod:</b></p>

<form>

Ime: <input type="text" onkeyup="dajPredlog(this.value)">

</form>

<p>Predlozi: <span id="sviucenici"></span></p>

</body>

</html>

Objašnjenje primera

U primeru kada korisnik kuca u ulaznom polju funkcija dajPredlog se izvršava.

Funkcija se startuje na događaj kucanje na tastaturi.

Objašnjenje:

Prvo, proverava da li ulaz prazan (str.length == 0). Ako je tako, briše sadržaj predloga sviucenici

I izlazi iz funkcije sve dok ne počne novo kucanje.

Ukoliko, polje za unos nije prazno, radi sledeće:

Pravi XMLHttpRequest objekt

Pravi funkciju koja će biti izvršena kada odgovor sa server bude spreman.

Šalje zahtev PHP filu (predlozi.php) na server

Page 7: Ajax - MATKOSmatkos.in.rs/kurs/stvari/Ajax.pdf · moguće da se apdejtuje deo web stranice a da se ne riloaduje čitava stranica. Svi moderni brauzeri ... Osobina Opis onreadystatechange

Zapazite da q parametar je dodat uz predlozi.php?q="+str

Gde str promenljiva nosi sadržaj koji je unet u ulazno polje

PHP File - "predlozi.php"

Php proverava niz imena I vraća odgovarajuće ime/imena u brauzer:

PHP stristr() Funkcija

Funkcija stristr() function traži prvo pojavljivanje u stringu zadate reči.

substr(string,start,length) Definition and Usage

Funkcija substr() vraća deo stringa.

<?php

// Niz imena

$a[] = "Jovana";

$a[] = "Milica";

$a[] = "Nikola";

$a[] = "Vuk";

$a[] = "Djordje";

$a[] = "Bogdana";

$a[] = "Marko";

$a[] = "Jovan";

$a[] = "Katarina";

$a[] = "Luka";

$a[] = "Marija";

$a[] = "Rajko";

Page 8: Ajax - MATKOSmatkos.in.rs/kurs/stvari/Ajax.pdf · moguće da se apdejtuje deo web stranice a da se ne riloaduje čitava stranica. Svi moderni brauzeri ... Osobina Opis onreadystatechange

$a[] = "Zeljko";

$a[] = "Milan";

$a[] = "Milos";

$a[] = "Petar";

$a[] = "Vladana";

$a[] = "Emilija";

$a[] = "Andreja";

$a[] = "Veljko";

$a[] = "Aleksa";

$a[] = "Predrag";

$a[] = "Aleksandar";

// uzmi parameter q iz URL

$q = $_REQUEST["q"];

$predlog = "";

// pretrazi sve predloge iz niza ako je $q razlicito od praznog ""

if ($q !== "") {

$q = strtolower($q);

$len=strlen($q);

foreach($a as $ime) {

Page 9: Ajax - MATKOSmatkos.in.rs/kurs/stvari/Ajax.pdf · moguće da se apdejtuje deo web stranice a da se ne riloaduje čitava stranica. Svi moderni brauzeri ... Osobina Opis onreadystatechange

if (stristr($q, substr($ime, 0, $len))) {

if ($predlog === "") {

$predlog = $ime;

} else {

$predlog .= ", $ime";

}

}

}

}

// Prikaži "bez predloga" ako nije nađeno ništa slično

echo $predlog === "" ? "bez predloga" : $predlog;

?>

AJAX - Pravljenje XMLHttpRequest

Objekta

Ključna reč u AJAX-u je XMLHttpRequest objekat.

XMLHttpRequest Objekt

Svi moderni brauzeri podržavaju XMLHttpRequest objekte.

XMLHttpRequest objekat se koristi za razmenu podataka sa serverom iza scene. A to znači da je

moguće da se apdejtuje deo web stranice a da se ne riloaduje čitava stranica.

Svi moderni brauzeri (Chrome, IE7+, Firefox, Safari, i Opera) imaju ugrađene

XMLHttpRequest objekte.

Sintaksa za pravljenje XMLHttpRequest objekata:

Page 10: Ajax - MATKOSmatkos.in.rs/kurs/stvari/Ajax.pdf · moguće da se apdejtuje deo web stranice a da se ne riloaduje čitava stranica. Svi moderni brauzeri ... Osobina Opis onreadystatechange

promenljiva = new XMLHttpRequest();

AJAX – Slanje zahteva serveru

XMLHttpRequest objekat is used to exchange data with a server.

Slanje zahteva

Za slanje zahteva server služe metode open() i send() za XMLHttpRequest objekt:

xhttp.open("GET", "ajax_info.txt", true);

xhttp.send();

Metod Opis

open(method, url, async)

Specifies the type of request

metod: tip zahteva: GET ili POST

url: server (file) lokacija

async: true (asynchronous) ili false (synchronous)

send() Šalje zahtev serveru (koristedi GET)

send(string) Šalje zahtev serveru (koristedi POST)

GET ili POST?

GET je brži I jednostavniji od POST, I može biti korišćen u mnogim slučajevima.

Bilo kako, uvek se koristi POST kada se zahteva:

Neki keširan fajl koji nije opcionalni (update nekog fajla ili baze podataka na serve). Slanje velike količine podataka na server (POST nema ograničenje). Slanje unosa korisnika (koji može da sadrži nepoznate karaktere), POST je robusniji I sigurniji od

GET.

url – Fajl na server

Parametar url u open() metodu, je adresa fajla na serveru:

Page 11: Ajax - MATKOSmatkos.in.rs/kurs/stvari/Ajax.pdf · moguće da se apdejtuje deo web stranice a da se ne riloaduje čitava stranica. Svi moderni brauzeri ... Osobina Opis onreadystatechange

Taj fajl može biti bilo koji fajl.

Async=true

Kada se koristi async=true, specificira se funkcija koja će biti izvršena kada je odgovor spreman

u događaju onreadystatechange :

dodajime.php

<!DOCTYPE html>

<html>

<body>

<div id="demo"><h2>Neka se ovo polje promeni</h2></div>

<button type="button" onclick="loadDoc()">Promeni ovo</button>

<script>

function loadDoc() {

var xhttp = new XMLHttpRequest();

xhttp.onreadystatechange = function() {

if (xhttp.readyState == 4 && xhttp.status == 200) {

document.getElementById("demo").innerHTML = xhttp.responseText;

}

};

Page 12: Ajax - MATKOSmatkos.in.rs/kurs/stvari/Ajax.pdf · moguće da se apdejtuje deo web stranice a da se ne riloaduje čitava stranica. Svi moderni brauzeri ... Osobina Opis onreadystatechange

xhttp.open("GET", "promena.txt", true);

xhttp.send();

}

</script>

</body>

</html>

AJAX – Odgovor servera

Da bi dobili odgovor od server koristi s responseText u XMLHttpRequest objektu.

promena.txt

Ovo je lekcija o AJAX-u u II delu PHP kursa

AJAX - Događaj onreadystatechange

Događaj onreadystatechange

Kada je zahtev poslat na server, mi hoćemo da izvršimo neke akcije na osnovu odgovora.

Događaj onreadystatechange se okida svaki put kada se readyState menja.

readyState karakteristika zadržava status zahteva XMLHttpRequest.

Evo tri osobine XMLHttpRequest objekta:

Osobina Opis

onreadystatechange Čuva funkciju (ili ime neke funkcije) koja se poziva svaki put automatski kada se

readyState osobina promeni

readyState Drži status XMLHttpRequest. Menja se od 0 do 4:

0: zahtev nije otpočeo

1: server conekcija uspostavljena

Page 13: Ajax - MATKOSmatkos.in.rs/kurs/stvari/Ajax.pdf · moguće da se apdejtuje deo web stranice a da se ne riloaduje čitava stranica. Svi moderni brauzeri ... Osobina Opis onreadystatechange

2: primljen zahtev

3: procesuiranje zahteva

4: zahtev završen I odgovor spreman

status 200: "OK"

404: Nema stranice

U događaju onreadystatechange, mi specificiramo šta će se dogoditi kada je odgovor server

spreman da bude procesuiran.

Kada je readyState 4 i status 200,odgovor je spreman:

AJAX PHP primer odozgo

Spisakucenika.php

AJAX Database Primer

AJAX može da se koristi za interaktivnu komunikaciju sa bazom podataka.

AJAX povezan sa bazom podataka- primer

The following example will demonstrate how a web page can fetch information from a database

with AJAX:

Example

Example Explained - The showCustomer() Function

Kada selektuje, funkcija prikazKorisnika() se izvršava. Okidač je događaj "onchange":

prikazKorisnika.php

<html>

<head>

<script>

Page 14: Ajax - MATKOSmatkos.in.rs/kurs/stvari/Ajax.pdf · moguće da se apdejtuje deo web stranice a da se ne riloaduje čitava stranica. Svi moderni brauzeri ... Osobina Opis onreadystatechange

function prikazKorisnika(str) {

if (str == "") {

document.getElementById("txtHint").innerHTML = "";

return;

} else {

if (window.XMLHttpRequest) {

// code for IE7+, Firefox, Chrome, Opera, Safari

xmlhttp = new XMLHttpRequest();

} else {

// code for IE6, IE5

xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

}

xmlhttp.onreadystatechange = function() {

if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {

document.getElementById("txtHint").innerHTML = xmlhttp.responseText;

}

};

xmlhttp.open("GET","uzmikorisnika.php?q="+str,true);

xmlhttp.send();

}

}

</script>

</head>

Page 15: Ajax - MATKOSmatkos.in.rs/kurs/stvari/Ajax.pdf · moguće da se apdejtuje deo web stranice a da se ne riloaduje čitava stranica. Svi moderni brauzeri ... Osobina Opis onreadystatechange

<body>

<form>

<select name="users" onchange="prikazKorisnika(this.value)">

<option value="">Izaberi osobu:</option>

<option value="1">Zorica</option>

<option value="2">Bojan</option>

<option value="3">Bane</option>

<option value="4">Zarko</option>

</select>

</form>

<br>

<div id="txtHint"><b>Informacije o osobi će biti ovde prikazane...</b></div>

</body>

</html>

Funkcija prikazKorisnika() radi sledeće:

Čekira da li je neki korisnik selektovan Pravi XMLHttpRequest objekt Pravi funkciju koja de biti izvršena kada server bude bio spreman da odgovori Šalje zahtev na server Primetite da se parameter (q) dodaje na URL

AJAX Server stranica

Stranica na serveru koju poziva JavaScript se zove "uzmikorisnika.php"- misli se uzmi korisnika

iz baze.

uzmikorisnika.php

Page 16: Ajax - MATKOSmatkos.in.rs/kurs/stvari/Ajax.pdf · moguće da se apdejtuje deo web stranice a da se ne riloaduje čitava stranica. Svi moderni brauzeri ... Osobina Opis onreadystatechange

<!DOCTYPE html>

<html>

<head>

<style>

table {

width: 100%;

border-collapse: collapse;

}

table, td, th {

border: 1px solid black;

padding: 5px;

}

th {text-align: left;}

</style>

</head>

<body>

<?php

$q = intval($_GET['q']);

include('C:\xampp\htdocs\berger\conBerger.php');/*konekcija sa bazom*/

$upit9='SELECT *FROM `korisnici` WHERE `redni` ="'.$q.'"';

Page 17: Ajax - MATKOSmatkos.in.rs/kurs/stvari/Ajax.pdf · moguće da se apdejtuje deo web stranice a da se ne riloaduje čitava stranica. Svi moderni brauzeri ... Osobina Opis onreadystatechange

$upit_pokretanje9=mysql_query($upit9);

if($upit_pokretanje9=mysql_query($upit9)){echo 'upit dobar';

while ($upit_vrsta=mysql_fetch_assoc($upit_pokretanje9))

{$id5=$upit_vrsta['sifra'];$id6=$upit_vrsta['redni'];$id7=$upit_vrsta['korisnicko'];$id8=$

upit_vrsta['nesto'];

}

}

echo "<table>

<tr>

<th>Redni</th>

<th>Korisnicko</th>

<th>Sifra</th>

<th>nesto</th>

</tr>";

echo "<tr>";

echo "<td>" . $id6. "</td>";

echo "<td>" .$id7. "</td>";

echo "<td>" . $id5 . "</td>";

echo "<td>" .$id8 . "</td>";

echo "</tr>";

echo "</table>";

Page 18: Ajax - MATKOSmatkos.in.rs/kurs/stvari/Ajax.pdf · moguće da se apdejtuje deo web stranice a da se ne riloaduje čitava stranica. Svi moderni brauzeri ... Osobina Opis onreadystatechange

mysql_close($con);

?>

</body>

</html>

intval — Uzima celobrojnu vrednost promenljive -Bojan