18-03-2009, 01:16 AM
Vũ Thanh Lai
Đầy tớ Nhân Dân
Được cảm ơn 30859 trong 10211 bài viết
Đã viết 23,174 bài thảo luận
4251 lượt xem
#1
AJAX Toàn Tập
Ajax mang đến với thế mạnh của nó !!!
Ajax là viết tắt của Asynchronous JavaScript and XML – công nghệ kết hợp hai tính năng mạnh của JavaScript được các nhà phát triển đánh giá rất cao:
* Gửi yêu cầu (request) đến server
* Phân tách và làm việc với XML
Các ứng dụng Ajax xoay quanh một tính năng có tên là XMLHttpRequest.
Ở các ứng dụng web truyền thống, khi người dùng có một cần thay đổi dữ liệu trên trang Web, yêu cầu thay đổi được gửi về server dưới dạng HTTP request (hay còn gọi postback), server sẽ xử lý yêu cầu này và gửi trả response chứa các thông tin dưới dạng HTML và CSS, trang HTML này sẽ thay thế trang cũ. Qui trình này được mô tả là nhấp-chờ và tải lại (click-wait-and-refresh): ví dụ người dùng sau khi nhấn một nút “Submit” trên trang web phải chờ cho đến khi server xử lý xong mới có thể tiếp tục công việc.
Anh em coi qua hình vẽ sau, nó là: Mô hình tương tác trong một ứng dụng Web truyền thống:

Ajax cho phép tạo ra một Ajax Engine nằm giữa giao tiếp này. Khi đó, các yêu cầu gửi resquest và nhận response do Ajax Engine thực hiện. Thay vì trả dữ liệu dưới dạng HTML và CSS trực tiếp cho trình duyệt, web server có thể gửi trả dữ liệu dạng XML và Ajax Engine sẽ tiếp nhận, phân tách và chuyển hóa thành XHTML + CSS cho trình duyệt hiển thị.
Việc này được thực hiện trên client nên giảm tải rất nhiều cho server, đồng thời người sử dụng cảm thấy kết quả xử lý được hiển thị tức thì mà không cần nạp lại trang. Mặt khác, sự kết hợp của các công nghệ web như CSS và XHTML làm cho việc trình bày giao diện trang web tốt hơn nhiều và giảm đáng kể dung lượng trang phải nạp. Đây là những lợi ích hết sức thiết thực mà Ajax đem lại.
Anh em có thể nhìn vào 2 hình vẽ để so sánh hai mô hình ứng dụng Web: truyền thống và sử dụng Ajax.

Còn đây là mô hình tương tác trong một ứng dụng Web dùng Ajax:
Rõ ràng điểm khác biệt là thay vì phải tải cả trang web thì với AJAX ta chỉ cần tải về phần của trang Web muốn thay đổi. Điều này giúp cho ứng dụng web của phản hồi nhanh hơn, thông minh hơn. Ngoài ra, điểm đặc biệt quan trọng trong công nghệ Ajax nằm ở chỗ Asynchronous - bất đồng bộ - tức là gửi yêu cầu của mình tới server và tiếp tục thực thi tác vụ hiện tại mà không cần chờ trả lời. Khi nào server xử lý xong yêu cầu của, nó sẽ báo hiệu và ta có thể đón để thể hiện những thay đổi cần thiết
Chủ đề mới cùng chuyên mục
18-03-2009, 01:17 AM
Vũ Thanh Lai
Đầy tớ Nhân Dân
Được cảm ơn 30859 trong 10211 bài viết
Đã viết 23,174 bài thảo luận
#2
AJAX Toàn Tập
Bài 2 : Ứng dụng tương tác của CSS
AJAX là một tập hợp các công nghệ bổ sung lẫn nhau. JavaScript có vai trò chất keo kết dính các ứng dụng lại với nhau. Giao diện người dùng được tạo và tái nạp bằng cách dùng JavaScript để điều khiển Document Object Model, tạo và tổ chức biểu diễn dữ liệu cho người dùng, đồng thời xử lí các tương tác trên chuột và bàn phím.
Cascading Style Sheets (CSS) cung cấp một sự nhất quán trên cảm quan “look and feel” cho ứng dụng và khả năng thao tác mạnh mẽ với DOM. Đối tượng XMLHttpRequest (hay một cơ chế tương đương nào đó) được dùng để liên lạc một cách bất đồng bộ với server, đảm bảo việc gửi yêu cầu người dùng và tái nạp dữ liệu trong khi người dùng vẫn làm việc.
Cascading Style Sheet – CSS
Phần này khá là dài, tớ sẽ viết cố gắng thật dễ hiểu.
Cascading Style Sheet – tạm dịch là bảng kiểu xếp chồng - là một phần không thể thiếu trong thiết kế Web, nó được dùng rất nhiều trong các ứng dụng Web truyền thống cũng như trong Ajax. Một stylesheet đưa ra cách kiểm soát các loại định dạng trực quan, nó có thể được áp dụng cho các thành phần riêng lẻ trên các trang.
Hơn nữa, cho các thành phần định dạng trực quan như màu sắc, lề, hình nền, tính trong suốt, kích cỡ, stylesheet có thể xác định cách mà các phần tử được bố trí quan hệ với các phần tử khác và tương tác với người dùng, cho phép các hiệu ứng khá mạnh mẽ.
Trong ứng dụng Web truyền thống, stylesheet cung cấp một cách hiệu quả để xác định cách thể hiện vị trí và có thể được dùng lại trong nhiều trang web khác nữa.Với AJAX, stylesheet cung cấp một “kho chứa” các giao diện xác định trước có thể áp dụng cho các phần tử động với độ dài các đoạn mã nguồn là nhỏ nhất.
CSS định dạng một trang web theo ba cách :
1. Sử dụng trực tiếp kèm với các thẻ HTML (Inline Style Sheet)
2. Định nghĩa trong một trang web (Internal Style Sheet).
3. Định nghĩa thành một file CSS riêng (External Style Sheet). Trang web của chúng ta sẽ tham chiếu đến file CSS này.
Một quy tắc định dạng và bố trí gồm có hai phần: thành phần lựa chọn - selector và phần khai báo - style declaration. Selector đặc tả các phần tử được định dạng và bố trí, và style declaration khai báo các thuộc tính định dạng sẽ được áp dụng. Giả sử muốn tạo ra các dòng text trong level-1 heading trong tài liệu (đó là đoạn nằm trong thẻ <H1>) có màu vàng.
Có thể khai báo thuộc tính CSS như sau:
HTML Code:
h1 {color: yellow;size:14}
Các ưu điểm của CSS trong thiết kế web
a. CSS giúp tiết kiệm được rất nhiều thời gian và công sức cho việc thiết kế web.
Style trong phiên bản HTML 4.0 qui định cách thức thể hiện các thẻ. Style thường được lưu trong các file nằm ngoài trang web. Chúng giúp thay đổi cách thức định dạng và cách bố trí các trang web chỉ bằng cách thay đổi riêng file CSS.
b. CSS cho phép điều khiển cách định dạng và cách bố trí của cùng lúc nhiều trang web với chỉ duy nhất một lần thay đổi tại một vị trí.
c. Có thể định nghĩa nhiều style vào một thẻ HTML .
CSS cho phép đưa các thông tin định nghĩa thẻ thông qua nhiều con đường khác nhau. Style có thể được qui định ở trong chỉ một thẻ HTML, được qui định trong một trang web hoặc ở trong một file CSS bên ngoài.
d. Thứ tự áp dụng các định dạng
Như trên đã nói, có thể sử dụng nhiều cách khác nhau để làm CSS. Điều gì sẽ xảy ra nếu áp dụng nhiều cách định dạng cho một thẻ HTML? Theo một cách chung nhất ra có thể nói các style sẽ được "xếp tầng" (cascade). Việc xếp tầng này tuân theo thứ tự ưu tiên giảm dần như sau:
* Inline Style (Style được qui định trong một thẻ HTML cụ thể)
* Internal Style (Style được qui định trong phần <HEAD> của một trang HTML)
* External Style (style được qui định trong file CSS ngoài)
* Browser Default (thiết lập mặc định của trình duyệt)
18-03-2009, 01:18 AM
Vũ Thanh Lai
Đầy tớ Nhân Dân
Được cảm ơn 30859 trong 10211 bài viết
Đã viết 23,174 bài thảo luận
#3
AJAX Toàn Tập
Bài 3 : Công nghệp Ajax - Cú pháp cơ bản của CSS
Cú pháp của CSS gồm ba thành phấn:
* Thành phần lựa chọn (thường là một thẻ HTML) (Selector)
* Thuộc tính (Property)
* Giá trị (Value)
Thể hiện của cú pháp CSS
HTML Code:
Selector {
Property1: Value1;
Property2: Value2;
}
Selector có thể là các thẻ/nhóm thẻ HTML, các lớp khai báo, hay bằng định danh duy nhất của phần tử.
Khi chèn các đoạn mã CSS vào trang web, trình duyệt sẽ hiển thị trang web theo cách CSS đã qui định cho nó, có ba cách để chèn CSS vào trang web.
a. External Style Sheet (sử dụng file CSS được định nghĩa thành trong file riêng)
Mỗi trang web sử dụng file CSS ngoài này đều phải sử dụng thẻ <LINK>. Thẻ <LINK> được đặt bên trong thẻ <HEAD>.
HTML Code:
<head>
<link rel="stylesheet" type="text/css"
href="mystyle.css" />
</head>
b. Internal Style Sheet (định nghĩa các style sheet ngay trong trang web)
Trong trường hợp mỗi trang web của sử dụng các định dạng khác nhau, dùng Internal Style Sheet. Để định nghĩa Internal Style Sheet, sử dụng thẻ <STYLE> đặt bên trong thẻ <HEAD>.
HTML Code:
<head>
<style type="text/css">
hr {color: sienna}
p {margin-left: 20px}
body {background-image: url("images/back40.gif")}
</style>
</head>
c. Internal Style Sheet (style được qui định ngay trong mỗi thẻ HTML)
Đây là phương pháp kém hiệu quả nhất, không nên sử dụng phương pháp này vì đã làm mất các ưu điểm của CSS.
HTML Code:
<p style="color: sienna; margin-left: 20px">
This is a paragraph
</p>
Các thuộc tính của CSS Style
Mỗi phần tử trong trang HTML có thể được qui định theo nhiều kiểu. Một phần text của một phần tử có thể được quy định theo các thuộc tính color, font size, độ đậm của phông, và kiểu chữ sử dụng. Có rất nhiều tùy chọn được áp dụng cho thuộc tính trên. Ví dụ để qui định cho một paragraph:
HTML Code:
.robotic{
font-size: 14pt;
font-family: courier new, courier, monospace;
font-weight: bold;
color: gray;
}
18-03-2009, 01:19 AM
Vũ Thanh Lai
Đầy tớ Nhân Dân
Được cảm ơn 30859 trong 10211 bài viết
Đã viết 23,174 bài thảo luận
#4
AJAX Toàn Tập
Bài 4 : Công nghệ Ajax - Làm việc với DOM bằng JavaScript
Trong một ứng dụng bất kỳ, nếu muốn thay đổi giao diện người dùng khi họ đang làm việc, thì phải cung cấp các phản hồi lại khi người dùng gửi các yêu cầu.
Để hiểu rõ cơ chế làm việc với DOM bằng JavaScript, chúng ta cùng xét một ví dụ về một trang HTML đơn giản.
HTML Code:
<html>
<head>
<link rel='stylesheet' type='text/css' href='hello.css' />
<script type='text/javascript' src='hello.js'></script>
</head>
<body>
<p id='hello'>hello</p>
<div id='empty'></div>
</body>
Ta đã thêm vào các tham chiếu đến các file hello.css (dùng Cascading Style Sheet) và một file chứa mã nguồnJavaScript là hello.js. Ở đây cũng đồng thời khai báo một thẻ <div> với một ID.
Còn đây là file hello.css chứa stylesheet để áp dụng cho các mục trong file HTML:
HTML Code:
.declared{
color: red;
font-family: arial;
font-weight: normal;
font-size: 16px;
}
.programmed{
color: blue;
font-family: helvetica;
font-weight: bold;
font-size: 10px;
}
Chúng ta định nghĩa hai style, để mô tả gốc của các nút DOM (tên của các style là tùy chọn). Các style này không dược dùng trong file HTML, nhưng chúng sẽ được áp dụng qua file JavaScript.
HTML Code:
window.onload=function(){
var hello=document.getElementById('hello');
hello.className='declared';
var empty=document.getElementById('empty');
addNode(empty,"reader of");
addNode(empty,"Ajax in Action!");
var children=empty.childNodes;
for (var i=0;i<children.length;i++){
children.className='programmed';
}
empty.style.border='solid green 2px';
empty.style.width="200px";
}
function addNode(el,text){
var childEl=document.createElement("div");
el.appendChild(childEl);
var txtNode=document.createTextNode(text);
childEl.appendChild(txtNode);
}
Hàm window.onload() sẽ được gọi khi trang web được nạp. Tại thời điểm này, cấu trúc cây DOM sẽ được thiết lập.
18-03-2009, 01:20 AM
Vũ Thanh Lai
Đầy tớ Nhân Dân
Được cảm ơn 30859 trong 10211 bài viết
Đã viết 23,174 bài thảo luận
#5
AJAX Toàn Tập
Bài 5: DOM - Tìm kiếm & Tạo DOM Node
DOM - Tìm kiếm & Tạo DOM Node
1.Tìm kiếm một DOM Node
êu cầu đầu tiên để làm việc trên DOM với JavaScript là đi tìm kiếm một phần tử để thay đổi. Trước hết cần bắt đầu tham chiếu qua nút gốc - root node, nút này thể hiện qua biến toàn cục document.
Mỗi nút trong DOM là một nút con (hoặc nút con cấp hai, ba…) của document, nhưng cứ đi dần vào cây DOM, sẽ thấy một tài liệu phức tạp được biểu diễn bởi DOM, và việc tìm kiếm là rất khó khăn.
Vì thế có các cách sau để tìm kiếm một nút nhanh chóng hơn. Mỗi phần tử HTML có một thuộc tính ID, ví dụ như:
Code:
<span id='hello'>option</span>
or
HTML Code:
<div id='empty'></div>
Mỗi một nút DOM có thể có một ID gán cho nó, và ID này có thể được dùng để tham chiếu tới nút qua hàm :
Code:
var varhello=document.getElementById('hello');
Trong một số trường hợp, cần duyệt qua cấu trúc cây từng bước một, mỗi nút DOM có một nút cha và nhiều nút con. Chúng có thể được truy cập bởi các thuộc tính parentNode và childNodes, thuộc tính parentNode trả về một đối tượng DOM node khác, trong khi childNodes trả về một mảng javascript:
HTML Code:
var children=empty.childNodes;
for (var i=0;i<children.length;i++){
...
}
Một cách khác để tìm kiếm là dựa trên loại thẻ HTML, dùng phương thức getElementsByTagName(). Ví dụ, document.getElementsByTagName("UL") sẽ trả về chuỗi tất cả các thẻ <UL> trong tài liệu.
HTML Code:
var tgn=getElementsByTagName("hello")
2.Tạo DOM Node
Trong nhiều trường hợp cần tạo các nút mới và thêm nó vào tài liệu. JavaScript cung cấp một số phương thức để làm điều đó. Các phương thức chuẩn để tạo nút mới là document.createElement() và document.createTextNode(), phương thức createElement() có thể được dùng để tạo ra bất kỳ phần tử HTML nào, tham số là kiểu của loại thẻ HTML;
HTML Code:
var childEl=document.createElement("div");
createTextNode() tạo một nút thể hiện qua một đoạn text, thường được tìm thấy trong các thẻ về heading, div, paragraph, và list item.
HTML Code:
var txtNode=document.createTextNode("some text");
huẩn DOM coi các text node tách rời khỏi biểu diễn HTML. Chúng không có các stye để áp đặt cho trực tiếp và vì thế chúng yêu cầu ít bộ nhớ hơn.
Một nút khi được tạo ra phải được gắn vào tài liệu trước khi hiển thị trên trình duyệt, phương thức appendChild() được dùng để thực hiện điều này el.appendChild(childEl);
Ba phương thức createElement(), createTextNode(), và appendChild() cho phép thực hiện hầu hết các thao tác để thêm một nút vào tài liệu.
18-03-2009, 01:20 AM
Vũ Thanh Lai
Đầy tớ Nhân Dân
Được cảm ơn 30859 trong 10211 bài viết
Đã viết 23,174 bài thảo luận
#6
AJAX Toàn Tập
Bài 6: Thêm style vào tài liệu - Sử dụng thuộc tính innnerHTML
Thêm style vào tài liệu - Sử dụng thuộc tính innnerHTML
6.1. Thêm style vào tài liệu
DOM cũng cung cấp các phương thức để chỉnh sửa style của các phần tử và tạo định dạng lại cho cấu trúc đã được định nghĩa trong stylesheet.
Mỗi phần tử trong trang web có thể có nhiều giao diện trực quan có thể được áp đặt qua DOM, như vị trí, chiều dài và rộng, mằu sắc, canh lề và đường viền. Các trình duyệt ngày nay đều cung cấp các ràng buộc JavaScript cho phép thay đổi giao diện mức thấp và áp đặt các định dạng một cách nhất quán và dễ dàng với các lớp CSS.
Thuộc tính className
Ví dụ đoạn code sau sẽ áp đặt các quy tắc biểu diễn của lớp declared cho một nút:
HTML Code:
hello.className='declared';
với hello tham chiếu tới một nút DOM.
Thuộc tính style
Ví dụ, đoạn mã sau bổ sung các thuộc tính style cho nút empty:
HTML Code:
empty.style.border="solid green 2px";
empty.style.width="200px";
6.2 Sử dụng thuộc tính innnerHTML
Các phần tử DOM của các trình duyệt web đều hỗ trợ một thuộc tính gọi là innerHTML, cho phép các nội dung kiểu string tùy ý được gán cho các phần tử theo thuộc tính này, như trong đoạn mã sau:
HTML Code:
function addListItemUsingInnerHTML(el,text){
el.innerHTML+="<div class='programmed'>"+text+"</div>";
}
Trên đây ta vừa xét một cách sơ lược về JavaScript, CSS, và DOM. Chúng được tập hợp trong một công nghệ gọi là Dynamic HTML (DHTML), và có thể thấy Ajax sử dụng rất nhiều kỹ thuật DHTML.
Như vậy, các bạn đã nắm được 2 công nghệ dùng trong AJAX: CSS và DOM. Trong các phần tiếp theo chúng ta cùng nhau thảo luận về: XML và việc truyền dữ liệu bất đồng bộ (Giới thiệu về XML và XSLT, XMLHttpRequest) và có lẽ cũng nên nói qua một chút về JS (JavaScript).
18-03-2009, 01:21 AM
Vũ Thanh Lai
Đầy tớ Nhân Dân
Được cảm ơn 30859 trong 10211 bài viết
Đã viết 23,174 bài thảo luận
#7
AJAX Toàn Tập
Bài 8 XML và việc truyền dữ liệu bất đồng bộ - XMLHttpRequest
Các ứng dụng web truyền thống đều phải tái nạp toàn bộ trang web khi gửi yêu cầu đến server, điều này thường dẫn đến một sự ngắt quãng cho công việc của người dùng. Vì thế yêu cầu đặt ra là làm cho các request của server không đồng bộ và người dùng vẫn có thể làm việc trong khi đợi tín hiệu trả lời từ server. Giải pháp đầu tiên để giải quyết vấn đề này là dùng IFrame. Cho đến gần đây, XMLHttpRequest đã được đưa ra như là một giải pháp mạnh mẽ và hiệu quả.
8.1 XmlDocument và XMLHttpRequest
Các đối tượng XmlDocument và XMLHttpRequest không phải là các chuẩn DOM mở rộng của trình duyệt web nhưng vẫn được hỗ trợ bởi rất nhiều trình duyệt. Các đối tượng đều dựa trên ActiveX hay các đối tượng JavaScript. Các trình duyệt khác đều có thực thi các đối tượng trên có các chức năng tương đương và các lời gọi hàm API.
Một ví dụ sử dụng XmlDocument:
HTML Code:
function getXMLDocument(){
var xDoc=null;
if(document.implementation&&document.implementation.
createDocument){
xDoc=document.implementation.createDocument("","",null);
}else if (typeof ActiveXObject != "undefined"){
var msXmlAx==null;
try{
msXmlAx=new ActiveXObject("Msxml2.DOMDocument");
}catch (e){
msXmlAx=new ActiveXObject("Msxml.DOMDocument");
}
xDoc=msXmlAx;
}
if (xDoc==null || typeof xDoc.load=="undefined"){
xDoc=null;
}
return xDoc;
}
Hàm vừa thực hiện trên sẽ trả về một đối tượng XmlDocument với các hàm API giống nhau trong các trình duyệt hiện nay.
Ví dụ sau có chức năng tương tự nhưng dùng cho đối tượng XMLHttpRequest.
HTML Code:
function getXMLHTTPRequest() {
var xRequest=null;
if (window.XMLHttpRequest) {
xRequest=new XMLHttpRequest();
}else if (typeof ActiveXObject != "undefined"){
xRequest=new ActiveXObject("Microsoft.XMLHTTP");
}
return xRequest;
}
8.4 Gửi một yêu cầu đến server - Sending request
Gửi một yêu cầu đến server từ một đối tượng XMLHttpRequest rất dễ dàng. Tất cả những việc ta cần làm là truyền cho nó địa chỉ URL của server. Ta sẽ làm như sau:
HTML Code:
function sendRequest(url,params,HttpMethod){
if (!HttpMethod){
HttpMethod="POST";
}
var req=getXMLHTTPRequest();
if (req){
req.open(HttpMethod,url,true);
req.setRequestHeader("Content-Type","application/
x-www-form urlencoded");
req.send(params);
}
}
XMLHttpRequest hỗ trợ một miền rất rộng các lời gọi HTTP, gồm các tham số truy vấn cho các trang web động.
8.5 Dùng các hàm callback để giám sát các yêu cầu
Các hàm callback đón bắt các sự kiện trong cách tiếp cận lập trình hướng sự kiện trong hầu hết các bộ công cụ UI hiện nay – như nhấn bàn phím, click chuột, vì không thể biết được các sự kiện nào sẽ xảy ra, nên các lập trình viên phải đón bắt các sự kiện có thể xảy ra. Khi tạo các giao diện người dùng UI bằng JavaScript, ta gán các hàm onkeypress, onmouseover, và đặt tên tương tự cho các thuộc tính tương đương cho các đối tượng. Khi lập trình cho các yêu cầu cho server, chúng ta gặp các thuộc tính tương tự onload và onreadystatechange.
18-03-2009, 01:21 AM
Vũ Thanh Lai
Đầy tớ Nhân Dân
Được cảm ơn 30859 trong 10211 bài viết
Đã viết 23,174 bài thảo luận
#8
AJAX Toàn Tập
Bài 9 Javascript - Nghiên cứu class js
JavaScript là một ngôn ngữ lập trình đa năng, nó tương đối giống C. JavaScript được biết dưới dạng một ngôn ngữ có kiểu tự do, thông dịch, ngôn ngữ kịch bản đa năng.
Kiểu tự do nghĩa là các biến không được khai báo cụ thể như string, integer, hay object, và các biến giống nhau có thể được gán bới các kiểu khác nhau. Ví dụ, đoạn mã sau là hợp lệ:
HTML Code:
var x=3.1415926;
x='pi';
Biến x lúc đầu được định nghĩa là giá trị số và sau đó được gán lại bởi giá trị xâu kí tự.
Thông dịch nghĩa là các mã nguồn không được biên dịch thành các đoạn mã nhị phân có thể thực thi được, và nó được thực thi trực tiếp, cụ thể là qua các trình duyệt. Khi triển khai một ứng dụng JavaScript, ta đặt mã nguồn trên web server, và mã nguồn này được truyền trực tiếp qua Internet tới web browser.
Đa năng nghĩa là ngôn ngữ này thích hợp để lập trình theo hầu hết các thuật toán và các tác vụ. JavaScript cơ bản hỗ trợ các kiểu số - number, string, date và time, array, các biểu thức toán học được xử lí trong văn bản, và các hàm toán học như các hàm lượng giác và bộ tạo số ngẫu nhiên. Hoàn toàn có thể định nghĩa cấu trúc một đối tượng bằng JavaScript, điều này mang đến nguyên lý cơ bản cho lập trình và để viết lên nhưng đoạn mã phức tạp.
Trong môi trường trình duyệt web, các chức năng cơ bản của trình duyệt, gồm CSS, DOM, và các đối tượng XMLHttpRequest, được coi là các phương tiện của JavaScript, cho phép các nhà phát triển điều khiển các trang ở các mức độ khác nhau.
Trong chồng công nghệ (tức là các công nghệ sử dụng liệt kê từ trên xuống dưới) của Ajax, JavaScript là chất kết dính các thành phần lại với nhau.
18-03-2009, 01:21 AM
Vũ Thanh Lai
Đầy tớ Nhân Dân
Được cảm ơn 30859 trong 10211 bài viết
Đã viết 23,174 bài thảo luận
#9
AJAX Toàn Tập
Bài 10:Đối tượng XMLHttpRequest
Đối tượng XMLHttpRequest
ây giờ ta sẽ xét vấn đề trọng tâm của Ajax: đối tượng XMLHttpRequest. XMLHttpRequest được đưa ra ban đầu trong Internet Explorer 5 như là một ActiveX component. Nó chỉ hoạt động trong Internet Explorer điều này làm cho số ít các nhà phát triển làm việc với XMLHttpRequest, cho tới khi nó trở thành một chuẩn không chính thức trong Mozilla 1.0 và Safari 1.2. Một điều rất quan trọng cần chú ý là XMLHttpRequest không là chuẩn của W3C, mặc dù rất nhiều chức năng của nó được đề xuất trong các đặc tả: DOM Level 3 Load and Save Specification.
Vì XMLHttpRequest không phải là một chuẩn, nên có những sự khác biệt nhỏ trong các trình duyệt về hỗ trợ đối tượng này, tuy nhiên hầu hết các phương thức và thuộc tính của nó đều được hỗ trợ. Hiện thời, Firefox, Safari, Opera, Konqueror, và Internet Explorer tất cả đều hỗ trợ XMLHttpRequest tương tự nhau. Nếu một số lượng người dùng đáng kể vẫn truy cập website với các trình duyệt phiên bản cũ, thì phải cân nhắc về sự lựa chọn công nghệ sẽ ứng dụng.
Giới thiệu về XMLHttpRequest
Trước tiên cần tạo một đối tượng XMLHttpRequest bằng JavaScript trước khi sử dụng đối tượng này để gửi request và xử lý các response. XMLHttpRequest chưa là chuẩn của W3C, vì thế phải dùng JavaScript theo nhiều cách để tạo một thể hiện của của XMLHttpRequest. Internet Explorer thực thi XMLHttpRequest như một đối tượng ActiveX, và các trình duyệt khác như Firefox, Safari, và Opera thực thi nó như một đối tượng JavaScript nguyên thủy. Vì sự khác nhau này, đoạn mã JavaScript phải chứa các cấu trúc logic để tạo một thể hiện của XMLHttpRequest dùng kỹ thuật ActiveX hay đối tượng JavaScript nguyên thủy.
Rất may mắn, trong trường hợp này không cần phải viết mã một cách tỉ mỉ để xác định kiểu trình duyệt và làm thế nào để tạo một thể hiện của đối tượng XMLHttpRequest. Công việc chỉ đơn giản là kiểm tra sự hỗ trợ đối tượng ActiveX của trình duyệt. Nếu hỗ trợ ActiveX, thì tạo một đối tượng XMLHttpRequest dùng ActiveX. Trường hợp khác, tạo đối tượng này bằng kỹ thuật tạo đối tượng JavaScript nguyên thủy. Đoạn mã JavaScript sau dễ dàng tạo ra các thể hiện của đối tượng XMLHttpRequest mà không quan tâm tới trình duyệt.
Tạo một thể hiện của đối tượng XMLHttpRequest:
HTML Code:
var xmlHttp;
function createXMLHttpRequest() {
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
}
Việc tạo một đối tượng XMLHttpRequest khá là đơn giản. Trước tiên, tạo một biến toàn cục (giả sử có tên là) xmlHttp để lưu trữ một tham chiếu đến đối tượng. Phương thức createXMLHttpRequest thực hiện việc tạo một thể hiện của XMLHttpRequest. Đoạn chương trình này chứa một câu lệnh rẽ nhánh đơn giản để xác định cách thức tạo một đối tượng.
Lệnh gọi window.ActiveXObject sẽ trả về một biến kiểu object hay giá trị null, tương đương với điều kiện true hay false của câu lệnh if, đây là dấu hiệu chỉ ra cho ta biết trình duyệt hỗ trợ ActiveX control, đó là Internet Explorer. Nếu thế, XMLHttpRequest được tạo ra là một thể hiện của ActiveXObject, truyền một chỉ báo kiểu string để xác định loại đối tượng ActiveX cần tạo. Trong thể hiện này, ta cung cấp tham số Microsoft.XMLHTTP cho hàm tạo, để chỉ ra rằng cần tạo một thể hiện của XMLHttpRequest.
Nếu lệnh gọi tới window.ActiveXObject không được thực thi (điều kiện false của lệnh if), lệnh JavaScript sẽ rẽ nhánh tương ứng với lệnh else, để xác định rằng trình duyệt thực thi XMLHttpRequest dưới dạng một đối tượng JavaScript nguyên thủy. Nếu window.XMLHttpRequest tồn tại, sau đó một thể hiện của XMLHttpRequest được tạo ra.
Kiểu dữ liệu XMLHttpRequest của JavaScript tương thích với rất nhiều trình duyệt khác nhau, có thể truy cập các thuộc tính và phương thức của một thể hiện của XMLHttpRequest mà không cần quan tâm tới cách tạo các thể hiện này. Điều này làm cho việc phát triển các ứng dụng đơn giản hơn và làm cho JavaScript không phụ thuộc vào trình duyệt cụ thể.
18-03-2009, 01:22 AM
Vũ Thanh Lai
Đầy tớ Nhân Dân
Được cảm ơn 30859 trong 10211 bài viết
Đã viết 23,174 bài thảo luận
#10
AJAX Toàn Tập
Bài 11: Đối tượng XMLHttpRequest (Phần 2)
Phân tích các đặc tính của XMLHttpRequest:
Các phương thức và thuộc tính
Danh mục sau chỉ ra các phương thức điển hình của đối tượng XMLHttpRequest:
abort() Hủy request hiện thời.
getAllResponseHeaders() Trả về tất cả các response header cho HTTP request dưới dạng cặp key/value.
getResponseHeader("header") Trả về giá trị kiểu string của header xác định.
open("method", "url") Thiết lập giai đoạn cho một lời gọi tới server. Tham số của method có thể là GET, POST, hay PUT. Tham số url có thể là quan hệ hay trực tiếp. Phương thức này còn có 3 tham số tùy chọn.
send(content) Gửi request tới server.
setRequestHeader("header", "value") Thiết lập header xác định cho giá trị cung cấp. open() phải được gọi trước khi cố gắng thiết lập bất kỳ một header nào.
Bây giờ ta xét cụ thể các phương thức này:
* void open(string method, string url, boolean asynch, string username, string password): Phương thức này thiết lập một phiên gọi tới server. Ý nghĩa của nó này là khởi tạo một request. Nó có hai tham số yêu cầu và ba tham số tùy chọn; ta phải cung cấp đặc tả của phương thức được triệu gọi (GET, POST, hay PUT) và địa chỉ URL của tài nguyên được gọi. Cũng có thể truyền một biến chỉ báo kiểu Boolean, xác định việc truyền là bất đồng bộ - giá trị mặc định là true, nghĩa là các request luôn bất đồng bộ theo mặc định. Nếu truyền một giá trị false, quá trình xử lí sẽ phải đợi cho đến khi có phản hồi từ server. Việc truyền dữ liệu bất đồng bộ là một lợi thế của việc dùng Ajax, vì vậy thiết lập tham số này ở giá trị false đã thay đổi mục đích việc sử dụng XMLHttpRequest. Ta thấy nó rất hữu ích trong một số trường hợp chẳng hạn như chứng thực người dùng (validating user) trong khi trang web của không hề bị thay đổi. Hai tham số cuối tùy chọn, cho phép sử dụng username và password.
* void send(content): Phương thức này thực hiện gửi request tới server. Nếu request được khai báo bất đồng bộ, kết quả được trả về ngay, còn không nó sẽ đợi cho tới khi nhận được response từ server. Tham số có thể là một thể hiện của một đối tượng DOM, một luồng dữ liệu vào (input stream), hay một kiểu string. Nội dung truyền cho phương thức này được gửi đi như một phần trong request.
* void setRequestHeader(string header, string value): Phương thức thiết lập giá trị cho phần header đã cho trong HTTP request. Tham số bao gồm một biến kiểu string biểu thị header được thiết lập và một string khác biểu diễn giá trị để thay thế trong header. Chú ý là nó cần phải được gọi trước khi gọi đến open(). Trong hầu hết các phương thức thì cặp open() và send() thường xuyên được gọi.
* void abort(): Phương thức này rất dễ hiểu, nó sẽ hủy request.
* string getAllResponseHeaders(): Trả về một biến kiểu string chứa response header của HTTP request. Header bao gồm các trường Content-Length, Date, và URI.
* string getResponseHeader(string header): Phương thức này tương tự như getAllResponseHeaders(); ngoại trừ việc nó nhận một tham số biểu diễn giá trị xác định header mà ta cấn đón bắt, giá trị trả về cũng có kiểu string.
Ngoài những phương thức chuẩn này, đối tượng XMLHttpRequest còn có các thuộc tính được liệt kê sau đây. Anh em chú ý ta sẽ phải sử dụng các thuộc tính mở rộng này khi làm việc với XMLHttpRequest.
onreadystatechange Bộ xử lý sự kiện cho một sự kiện phát sinh mỗi khi có sự thay đổi trạng thái.
readyState Trạng thái của request. Có 5 giá trị là
0 = uninitialized,1 = loading, 2 = loaded, 3 = interactive, và 4 = complete.
responseText Response trả về từ server dưới dạng string.
responseXML Response trả về từ server dưới dạng XML. Đối tượng này có thể được phân tách và khảo sát như một đối tượng tài liệu DOM.
status Mã trạng thái HTTP từ server (chẳng hạn 200 nếu không có lỗi, 404 cho lỗi Not Found, …).
statusText Thông điệp của mã trạng thái HTTP (chẳng hạn OK hay Not Found, …).