PHP ve AJAX responseXML Örneği
- Önceki Sayfa AJAX Veritabanı
- Sonraki Sayfa AJAX Canlı Arama
AJAX, XML olarak geri dönen veritabanı bilgilerini kullanabilir.
AJAX Database'ye XML Dönüşüm Örneği (Test Açıklaması: Bu örneğin fonksiyonel özelliği yok)
Aşağıdaki AJAX örneğinde, web sayfasının MySQL veritabanından bilgi nasıl okunacağını, verileri XML belgesine dönüştürülmesini ve bu belgenin farklı yerlerde kullanılmasını göstereceğiz.
Bu örnek, bir önceki bölümden 'PHP AJAX Database' örneği ile çok benzer, ancak büyük bir fark var: Bu örnekte, PHP sayfasından responseXML fonksiyonu kullanarak XML biçiminde veri alıyoruz.
XML belgesini yanıt olarak almak, sayfanın çeşitli yerlerini güncellemek için yeteneğimiz artırır, sadece bir PHP çıktısını alıp göstermekle kalmaz.
Bu örnekte, veritabanından alınan bilgileri kullanarak birden fazla <span> elementini güncelleyeceğiz.
Açılır listeden bir isim seçin
Bu sütun dört bileşen içerir:
- MySQL Veritabanı
- Basit bir HTML formu
- JavaScript
- PHP sayfası
Veritabanı
Bu örnekte kullanılacak veritabanı şu şekilde görünüyor:
id | İsim | Soyadı | Yaş | Anavatan | İş |
---|---|---|---|---|---|
1 | Peter | Griffin | 41 | Quahog | Bira Fabrikası |
2 | Lois | Griffin | 40 | Newport | Piano Öğretmeni |
3 | Joseph | Swanson | 39 | Quahog | Polis Memuru |
4 | Glenn | Quagmire | 41 | Quahog | Pilot |
HTML Formu
Örnekler, basit bir HTML formu ve JavaScript'e yönlendirme içeren bir içerik içerir:
<html> <head> <script src="responsexml.js"></script> </head> <body> <form> Bir Kullanıcı Seçin: <select name="users" onchange="showUser(this.value)"> <option value="1">Peter Griffin</option> <option value="2">Lois Griffin</option> <option value="3">Glenn Quagmire</option> <option value="4">Joseph Swanson</option> </select> </form> <h2> <span id="firstname"></span> <span id="lastname"></span> </h2> <span id="job"></span> <div style="text-align: right"> <span id="age_text"></span> <span id="age"></span> <span id="hometown_text"></span> <span id="hometown"></span> </div> </body> </html>
Örnek Açıklama - HTML Formu
- HTML formu, "users" adlı name özelliğine sahip bir aşağıdakiler listesidir ve seçenek değerleri veritabanının id alanı ile karşıt gelir.
- Formun altında birkaç <span> öğesi vardır ve bu öğeler, aldığımız farklı değerlerin yer tutucuları olarak kullanılır.
- Kullanıcı belirli bir seçimi seçtiğinde, "showUser()" fonksiyonu çalışır. Bu fonksiyonun çalışması "onchange" olayı tarafından tetiklenir.
Diğer bir deyişle, kullanıcı aşağıdaki listede bir değer değiştirdiğinde, showUser() fonksiyonu çalışır ve sonuçları belirtilen <span> öğesinde çıktılar.
JavaScript
Bu, "responsexml.js" dosyasında saklanan JavaScript kodudur:
var xmlHttp function showUser(str) { xmlHttp=GetXmlHttpObject() if (xmlHttp==null) { alert ("Browser does not support HTTP Request") return } var url="responsexml.php" url=url+"?q="+str url=url+"&sid="+Math.random() xmlHttp.onreadystatechange=stateChanged xmlHttp.open("GET",url,true) xmlHttp.send(null) } function stateChanged() { if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") { xmlDoc=xmlHttp.responseXML; document.getElementById("firstname").innerHTML= xmlDoc.getElementsByTagName("firstname")[0].childNodes[0].nodeValue; document.getElementById("lastname").innerHTML= xmlDoc.getElementsByTagName("lastname")[0].childNodes[0].nodeValue; document.getElementById("job").innerHTML= xmlDoc.getElementsByTagName("job")[0].childNodes[0].nodeValue; document.getElementById("age_text").innerHTML="Age: "; document.getElementById("age").innerHTML= xmlDoc.getElementsByTagName("age")[0].childNodes[0].nodeValue; document.getElementById("hometown_text").innerHTML="<br/>From: "; document.getElementById("hometown").innerHTML= xmlDoc.getElementsByTagName("hometown")[0].childNodes[0].nodeValue; } } function GetXmlHttpObject() { var objXMLHttp=null if (window.XMLHttpRequest) { objXMLHttp=new XMLHttpRequest() } else if (window.ActiveXObject) { objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP") } return objXMLHttp }
Örnek Açıklama:
showUser() ve GetXmlHttpObject fonksiyonları ile PHP ve AJAX MySQL Veritabanı Örneği Bu bölümdeki örnekler aynıdır. İlgili açıklamaları gözden geçirebilirsiniz.
stateChanged() fonksiyonu
Aşağıdaki listeden bir öğe seçildiğinde bu fonksiyon çalıştırılır:
- responseXML fonksiyonu kullanılarak "xmlDoc" değişkeni bir XML belgesi olarak tanımlanır
- Bu XML belgesinden verileri al ve bunları doğru "span" elementlerine yerleştir
PHP sayfası
Bu, "responsexml.php" adlı basit bir PHP dosyası olan bir sunucu sayfasıdır ve JavaScript tarafından çağrılır.
Bu sayfa PHP ile yazılmıştır ve MySQL veritabanını kullanır.
Kod, veritabanına yönelik bir SQL sorgusu çalıştırır ve sonuçları XML belgesi olarak döndürür:
<?php header('Content-Type: text/xml'); header("Cache-Control: no-cache, must-revalidate"); //Bir geçmiş tarih header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); $q=$_GET["q"]; $con = mysql_connect('localhost', 'peter', 'abc123'); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("ajax_demo", $con); $sql="SELECT * FROM user WHERE id = ".$q.""; $result = mysql_query($sql); echo '<?xml version="1.0" encoding="ISO-8859-1"?>' <person>'; while($row = mysql_fetch_array($result)) { echo "<firstname>" . $row['FirstName'] . "</firstname>"; echo "<lastname>" . $row['LastName'] . "</lastname>"; echo "<age>" . $row['Age'] . "</age>"; echo "<hometown>" . $row['Hometown'] . "</hometown>"; echo "<job>" . $row['Job'] . "</job>"; } echo "</person>"; mysql_close($con); ?>
Örnek Açıklama:
JavaScript'ten PHP sayfasına gelen sorgu olduğunda, şu gerçekleşir:
- PHP belgesinin content-type'i "text/xml" olarak ayarlanmıştır
- PHP belgesi "no-cache" olarak ayarlanmıştır, önbellekleme önlemek için
- HTML sayfası ile gelen verilerle $q değişkenini ayarla
- PHP ile MySQL sunucusu ile bağlantı aç
- Belirtilen id ile "user" bul
- Verileri XML belgesi olarak çıktıya ver
- Önceki Sayfa AJAX Veritabanı
- Sonraki Sayfa AJAX Canlı Arama