Các kỹ thuật sử dụng Ajax
(Neu khong doc duoc tieng Viet, ban nen dung IE7, FireFox, hoac Mozilla)
I. SỠdụng các Frame ẩn (The Hidden Frame)
à tưá»ng cÆ¡ bản cá»§a phương pháp nà y là tạo má»t frameset mà trong Äó có má»t Frame ẩn . Bạn có thỠẩn má»t frame bằng cách thiết láºp thuá»c tÃnh width và height bằng 0, có nghÄ©a là nó sẽ không ÄÆ°á»£c hiá»n thá». Mặc dù má»t và i trình duyá»t cÅ© không thá» dấu ÄÆ°á»£c hoà n toà n các frame ẩn (vẫn còn các border), kỹ thuáºt nà y vẫn ÄÆ°á»£c sá» dụng khá rá»ng rãi trong láºp trình web.
1.Hình mẫu

Kỹ thuáºt sá» dụng frame ẩn tương Äá»i rõ rà ng trên hình ảnh minh hoạ. Bưá»c Äầu tiên mà ngưá»i dùng luôn tương tác là frame hiá»n thá». Bình thưá»ng, ngưá»i dùng không biết má»t trang web có má»t frame ẩn, và tương tác vá»i trang web như bình thưá»ng. Khi ngưá»i dùng thá»±c hiá»n hà nh Äá»ng mà Äòi há»i dữ liá»u tương tác vá»i server, thì có sá»± kiá»n ÄÆ°á»£c phát sinh: má»t hà m Javascript thá»±c thi gá»i tá»i frame ẩn. Lá»nh thá»±c thi nà y có thá» chá» ÄÆ¡n giản là tải má»t trang khác và o frame ẩn hoặc phức tạp hÆ¡n là Äẩy dữ liá»u lên server. Không quan tâm tá»i chi tiết cá»§a các hà m Javascript, bưá»c thứ 2 sẽ thá»±c thi là : má»t yêu cầu ÄÆ°á»£c gá»i tá»i server.
Bưá»c thứ 3 trong hình mẫu là sá»± trả lá»i từ server. Vì bạn là m viá»c vá»i frame ẩn, nên dữ liá»u trả vá» sẽ tác Äá»ng lên frame ẩn, và trên frame ẩn Äó bạn có dữ liá»u trả vá» từ server. Bạn sẽ viết hà m Javascript Äá» "copy" dữ liá»u từ frame ẩn sang frame hiá»n thá», công viá»c nà y hoà n toà n là m á» trên trình duyá»t, và bạn sẽ không thấy trang web bá» refresh lại.
2.Sá» dụng Frame ẩn vá»i yêu cầu GET (Get Requests)
Bạn Äã ÄÆ°á»£c giải thÃch hình mẫu là m viá»c cá»§a frame ẩn, bây giá» ta sẽ tìm hiá»u sâu hÆ¡n vá» nó. Ta hãy tìm hiá»u và dụ sau:
Bạn tạo má»t trang web tìm kiếm ca sÄ©, bạn nháºp ID cá»§a ca sÄ© và sẽ nháºn vá» các thông tin cá»§a ca sÄ© Äó. Các thông tin cá»§a ca sÄ© ÄÆ°á»£c lưu trữ trong database trên server. Và dụ sá» dụng ngôn ngữ PHP và database server MySQL
Äầu tiên bạn tạo má»t bảng chứa các thông tin vá» ca sÄ©, bạn có thá» sá» dụng Äoạn script sau Äá» tạo:
CREATE TABLE `casi` (
`idcasi` int(11) NOT NULL auto_increment,
`hoten` varchar(25) collate latin1_general_ci NOT NULL default '',
`dongnhac` varchar(25) collate latin1_general_ci default '',
`albumhaynhat` varchar(100) collate latin1_general_ci NOT NULL default '',
`email` varchar(30) collate latin1_general_ci NOT NULL default '',
`baihathaynhat` varchar(100) collate latin1_general_ci NOT NULL default '',
PRIMARY KEY (`id`)
)ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
INSERT INTO `casi` VALUES (1,'Dam Vinh Hung','Nhac Tre','MrDam','damvinhhung@gmail.com','Lang thang');
INSERT INTO `casi` VALUES (2,'Phuong Thanh','Nhac Tre','Dem co don','phuongthanh@vnn.vn','Chia tay tinh dau');
INSERT INTO `casi` VALUES (3,'Cam Van','Tru Tinh','Ha Noi ','camvan@hnn.vn','Ha Noi mua vang nhung con mua');
Trưá»ng quan trá»ng nhất là idcasi , bạn sẽ sá» dụng trưá»ng nà y Äá» tìm kiếm thông tin cá»§a ca sÄ©.
Sau khi tạo database, bạn bắt Äầu thiết kế các trang web. Äá» sá» dụng kỹ thuáºt frame ẩn, bạn thiết kế trang web casi.html vá»i frameset như sau:
Phần quan trá»ng trong Äoạn code trên là thuá»c tÃnh rows cá»§a tag , ÄÆ°á»£c thiết láºp là 100%,0. trình duyá»t sẽ hiá»u là không hiá»n thá» phần ná»i dung cá»§a frame thứ 2, có tên là hiddenFrame. Tiếp theo, thuá»c tÃnh frameborder ÄÆ°á»£c thiết láºp bằng 0, nghÄ©a là sẽ không hiá»n thá» các ÄÆ°á»ng viá»n. Äiá»u quan trá»ng cuá»i cùng là thiết láºp thuá»c tÃnh noresize là noresize Äá» ngưá»i dùng không thá» thay Äá»i kÃch thưá»c cá»§a các frame. Ná»i dung cá»§a frame ẩn sẽ không ÄÆ°á»£c hiá»n thá» cho ngưá»i dùng.
Như trên ta thấy, frameset có gá»i 2 trang là display.htm và about:blank, trang about:blank là trang trắng mặc Äá»nh cá»§a trình duyá»t, ta không phải thiết kê. Ta sẽ thiết kế trang display.htm, trang nà y có nhiá»m vụ yêu cầu và hiá»n thá» thông tin cá»§a ca sÄ©. Trang nà y khá ÄÆ¡n giản, bao gá»m má»t textbox Äá» nháºp idcasi, má»t button Äá» kÃch hoạt thá»±c hiá»n yêu cầu, và má»t tag Äá» hiá»n thá» thông tin trả vá».
Tìm thông tin cua ca si: Ca si ID: <input type=" button" value=" Tìm thông tin"
onclick=" requestCasiInfo()" />
Bạn ÄỠý thấy khi Click , button sẽ gá»i má»t hà m có tên là requestCasiInfo(), hà m nà y tương tác vá»i frame ẩn Äá» nháºn vá» dữ liá»u. Nó ÄÆ¡n giản nháºn giá trá» á» textbox vá»i id là txtCasiId vÃ ÄÆ°a nó và o truy vấn á» trang getcasidata.php, tạo má»t URL dạng như getcasidata.php?id=1. URL nà y sẽ ÄÆ°á»£c tải vá» frame ẩn . Hà m cá»§a nó như sau:
function requestCasiInfo(){
var sId = document.getElementById("txtCasiId").value;
top.frames["hiddenFrame"].location = "getcasidata.php?id=" + sId;
}
Bưá»c Äầu tiên cá»§a hà m trên là nháºn sá» idcasi từ textbox txtCasiId. Äá» là m Äiá»u Äó bạn gá»i document.getElementById() vá»i textbox có id=txtCasiId và gá»i tá»i thuá»c tÃnh value, giá trá» trong textbox txtCasiId ÄÆ°á»£c gán và o biến sId. Tiếp theo, sId ÄÆ°á»£c gán và o chuá»i getcasidata.php?id=" Äá» tạo thà nh má»t URL Äầy Äá»§. Dòng lênh tiếp theo sẽ tạo má»t URL và gán nó và o frame ẩn. Äá» tham chiếu tá»i frame ẩn, bạn cần truy cáºp và o trình duyá»t bằng cách sá» dụng Äá»i tượng top . Äá»i tượng nà y chứa má»t danh sách mảng các frame có trong trình duyá»t. Má»i frame có thá» coi là má»t Äá»i tượng Äá» duyá»t URL riêng rẽ, bạn có thá» thiết láºp URL gán và o nó bằng thuá»c tÃnh location.
Tiếp theo chúng ta cần tạo má»t hà m vá»i chức nÄng hiá»n thá» thông tin ÄÆ°á»£c nháºn vá». Hà m displayCasiInfo(), sẽ ÄÆ°á»£c gá»i bá»i frame ẩn khi nó nháºn dữ liá»u trả vá». Tham sá» trong hà m chÃnh là thông tin ca sÄ© ÄÆ°á»£c hiá»n thá».
function displayCasiInfo(sText) {
var divCasiInfo = document.getElementById("divCasiInfo");
divCasiInfo.innerHTML = sText;
}
Trong hà m trên, dòng lênh Äầu tiên sẽ ÄÆ°á»£c gán tá»i tag
có chức nÄng hiá»n thá» dữ liá»u. Trong dòng lá»nh tiếp theo, thông tin ca sÄ© sText sẽ ÄÆ°á»£c gán và o thuá»c tÃnh innerHTML cá»§a tag . Thuá»c tÃnh innerHTML chứa dữ liá»u hiá»n thá» cá»§a má»t tag .Trong hà m requestCasiInfo() có gá»i tá»i trang php getcasidata.php, tiếp theo chúng ta sẽ thiết kế trang nà y.
window.onload = function () { Bây giá», chúng ta sẽ viết Äoạn mã php Äá» nháºn dữ liá»u: <?php Äến Äây, bạn Äã có thá» test chương trình cá»§a mình rá»i Äấy. Bạn có thá» download mã chương trình tại Äây. 3.Sá» dụng Frame ẩn vá»i yêu cầu POST (Post Requests) Trong phần trên, chúng ta sá» dụng GET Request Äá» nháºn dữ liá»u từ database. Nhưng nếu bạn muá»n gá»i má»t yêu cầu POST (POST Request) thì là m thế nà o? POST Request thưá»ng ÄÆ°á»£c sá» dụng khi muá»n gá»i lên Server, ngược lại vá»i GET Request là nháºn dữ liá»u từ server. Mặc dù GET Request có thá» gá»i má»t khá»i lượng lá»n dữ liá»u thông qua các câu lênh truy vấn (query string), nhưng má»t và i trình duyá»t chá» cho phép tá»i 512KB dữ liá»u trong câu lá»nh truy vấn. POST Request có thá» gá»i tá»i 2GB dữ liá»u, Äáp ứng phần lá»n yêu cầu cá»§a ngưá»i dùng. Theo mặc Äá»nh, chá» có má»t cách Äá» gá»i POST Request là sá» dụng má»t form vá»i thuá»c tÃnh method ÄÆ°á»£c thiết láºp là post. Sau Äó, dữ liá»u ÄÆ°á»£c gá»i và o POST Request tá»i URL ÄÆ°á»£c thiết láºp trong thuá»c tÃnh action. Má»t vấn Äá» phát sinh trong thá»±c tế là khi bạn submit thì trang web sẽ chuyá»n Äến má»t URL má»i. Äiá»u nà y là m tiêu tan mục ÄÃch sá» dụng Ajax trong hoà n cảnh nà y. May mắn thay, có má»t cách khắc phục khá ÄÆ¡n giản là : trong form sá» dụng thuá»c tÃnh target. Thuá»c tÃnh target trong tag sá» dụng tương tá»± như thuá»c tÃnh target trong tag : nó chá» Äá»nh rõ nÆ¡i nà o(URL nà o) sẽ khá»i Äá»ng quá trình duyá»t. Bằng cách thiết láºp thuá»c tÃnh target trên form, bạn sẽ không thấy sá»± thay Äá»i á» trang web hiá»n tại khi submit, mà kết quả cá»§a submit ÄÆ°á»£c thá» hiá»n á» má»t frame khác hoặc trên 1 cá»a sá» khác (trong trưá»ng hợp nà y là frame ẩn) Äá» bắt Äầu, chúng ta cần thiết láºp má»t frameset, tương tá»± như phần trên, chá» thay Äá»i display.htm thà nh entry.htm Phần ná»i dung cá»§a entry.htm ÄÆ°á»£c chứa trong tag và có các textbox tương ứng vá»i các trưá»ng trong database(trừ idcasi ÄÆ°á»£c database tá»± Äá»ng tÄng lên). Sau Äó là cặp Nhap du lieu ve ca si: Ten ca si: Chú ý rÄng thuá»c tÃnh target ÄÆ°á»£c thiết láºp gá»i tá»i hiddenFrame và khi bạn Click button GHI THONG TIN, sá»± thi hà nh sẽ thá»±c hiá»n trên frame ẩn nà y. Trong và dụ nà y, chá» có duy nhất má»t hà m Javascript trong trang chÃnh, Äấy là : saveResult(). Hà m nà y sẽ ÄÆ°á»£c gá»i khi frame ẩn trả lại kết quả từ viá»c ghi dữ liá»u vá» ca sÄ© lên database. function saveResult(sMessage) { Äó là nhiá»m vụ cá»§a frame ẩn Äá» gá»i thông tin tá»i ngưá»i sá» dụng. Äó là các thông tin xác nháºn vá» tình hình dữ liá»u vá» ca sÄ© Äã ÄÆ°á»£c gá»i lên hay chưa, nếu chưa thì tạo sao. Tiếp theo là file SaveCasi.php, file nà y chá»u trách nhiá»m xá» lý POST Request. Äoạn mã PHP ÄÆ°á»£c sá» dụng Äá» nháºn dữ liá»u từ POST Request và ghi chúng và o database. Khi sá» dụng POST Request, mảng $_POST sẽ chứa toà n bá» dữ liá»u ÄÆ°á»£c submit. <?php $shoten = $_POST["txthoten"]; Biến $sStatus ÄÆ°á»£c ÄÆ°a và o hà m Javascript. Váºy là bạn Äã có thá» sá» dụng POST Request theo cách cá»§a Ajax rá»i Äây. Bạn có thá» downloadchương trình demo tại Äây.
Get Customer Data
<?php
//ma php xu ly du lieu
?>
Trong trang trên, Äoạn mã php thứ nhất sẽ xá» lý dữ liá»u vá» ca sÄ© (sẽ ÄÆ°á»£c bà n chi tiết á» dưá»i), Äoạn mã php thứ hai hiá»n thá» thông tin ca sÄ© trả vá» trong tag
var divInfoToReturn = document.getElementById("divInfoToReturn");
top.frames["displayFrame"].displayCasiInfo(divInfoToReturn.innerHTML);
};
Hà m trên ÄÆ°á»£c gán trá»±c tiếp và o sá»± kiá»n window.onload. Äầu tiên nó tham chiếu tá»i
$sID = $_GET["id"];
$sInfo = "";
$sDBServer = "localhost";
$sDBName = "database";
$sDBUsername = "username";
$sDBPassword = "password";
$sQuery = "Select * from casi where `idcasi` =".$sID;
$oLink = mysql_connect($sDBServer,$sDBUsername,$sDBPassword);
@mysql_select_db($sDBName) or $sInfo=" Không the ket noi database";
if($oResult = mysql_query($sQuery) and mysql_num_rows($oResult) > 0) {
$aValues = mysql_fetch_array($oResult,MYSQL_ASSOC);
$sInfo = $aValues['hoten']."
".$aValues['dongnhac']."
".
$aValues['albumhaynhat']."
".$aValues['baihathaynhat']."
".
"".
$aValues['email']."";
} else {
$sInfo = "Không có ca si ID = $sID .";
}
mysql_close($oLink);
?>
Äoạn code trên sẽ gá»i tá»i database và nháºn lại dữ liá»u thÃch hợp. Biến $sID sẽ nháºn giá trá» id từ URL: "getcasidata.php?id=" bằng phương thức GET, tiếp theo là truy vấn và o database vá»i Äiá»u kiá»n thoả mãn $sID. Dữ liá»u trả vá» ÄÆ°á»£c gán và o biến $sInfo.
Dong nhac:
Album hay nhat:
Bai hat hay nhat:
E-mail:
var divStatus = document.getElementById("divStatus");
divStatus.innerHTML = "Thong bao:: "+ sMessage;
}
$sdongnhac = $_POST["txtdongnhac"];
$salbum = $_POST["txtAlbum"];
$sbaihat = $_POST["txtbaihat"];
$sEmail = $_POST["txtEmail"];
$sStatus = "";
$sDBServer = "localhost";
$sDBName = "test";
$sDBUsername = "username";
$sDBPassword = "password";
$sSQL = "Insert into casi(hoten,dongnhac,albumhaynhat,baihathaynhat,email) ".
" values ('$shoten','$sdongnhac','$salbum','$sbaihat','$sEmail')";
$oLink = mysql_connect($sDBServer,$sDBUsername,$sDBPassword);
@mysql_select_db($sDBName) or $sStatus = "Khong the ket noi database";
if($oResult = mysql_query($sSQL)) {
$sStatus = "Da ghi du lieu ca si voi ID la ".mysql_insert_id();
} else {
$sStatus = "Co loi, du lieu chua duoc ghi.";
}
mysql_close($oLink);
?>
Hà m mysql_insert_id() luôn trả vá» tham sá» nhảy tá»± Äá»ng má»i nhất. Trong trưá»ng hợp nà y là idcasi.
window.onload = function () {
top.frames["displayFrame"].saveResult("");
}Comments
hay lắm !
ReplyDeletethank !
ReplyDelete