Professional Documents
Culture Documents
2
css
HTML
js
DOM là viết tắt của Document Object Model. Là mô hình quản lý đối tượng thẻ HTML trong một tài liệu
HTML theo cấu trúc cây dựa trên mối quan hệ cha- con giữa các thẻ HTML và nội dung của thẻ HTML.
DOM sẽ cụ thể hóa chi tiết từng đối tượng HTML cùng nội dung và thuộc tính của nó thành những OBJECT
giúp cho Javascript có thể dễ dàng thực hiện các thao tác nhầm tác động đến nội dung, thành phần cũng
như thuộc tính của từng OBJECT cụ thể trong DOM.
3
css
HTML
js MÔ HÌNH DOM
4
css
HTML
js 3 bước để xây dựng trang
5
css
HTML
js
<html>
<head> <meta charset="UTF-8">
<link rel="stylesheet" type="text/css"
href="theme.css">
</head>
<body>
<p> Hello, <span> friend! </span> </p>
<div> <img src="smiley.gif" alt="Smiley face"
height="42" width="42"> </div>
</body>
</html> 6
css
HTML
js
7
css
HTML
js
CSSOM viết tắt của CSS Object Model. Trong khi trình duyệt đang xây dựng DOM,
nó bắt gặp một thẻ link trong phần head và dẫn tới một file CSS tên là theme.css ở
bên ngoài. Dự đoán rằng nó có thể cần đến tài nguyên này để render trang, ngay lập
tức nó điều phối 1 request đến. Giả sử file theme.css có nội dung như sau:
body { font-size: 16px; } p { font-weight: bold; } span { color: red; } p span { display:
none; } img { float: right; }
Tương tự HTML, engine cần chuyển tất cả CSS sang một thứ gì đó mà trình duyệt
có thể xử lý, chính là CSSOM. Dưới đây là mô phỏng của CSSOM tree:
8
css
HTML
js CSSOM
9
css
HTML
js
Tại sao CSSOM lại có cấu trúc dạng cây (tree)? Khi tính toán bộ style cuối cùng
cho mỗi object trên trang, trình duyệt sẽ bắt đầu với rule áp dụng toàn cục nhất
cho node đó (ví dụ: nếu nó là con của phần tử body thì áp dụng tất cả style của
body) và tinh chỉnh một cách đệ quy những style đã được tính toán bằng cách
áp dụng các rule cụ thể hơn.
Với ví dụ ở trên, bất kỳ text nào nằm bên trong thẻ span mà span nằm trong
phần tử body thì đều có font-size 16 và màu đỏ. Những style này được kế thừa
từ phần tử body. Nếu như span là con của phần tử p thì nội dung của nó sẽ bị
ẩn bởi vì có style khác cụ thể hơn đã được áp dụng cho nó (ở đây là display:
none).
Thêm nữa, lưu ý rằng tree ở trên chưa phải là CSSOM tree hoàn chỉnh và chỉ
thể hiện những style mà ta đã ghi đè trong style sheet. Mỗi trình duyệt cung cấp
1 bộ style mặc định, còn được biết tới là user agent styles - đây chính những
gì ta thấy nếu như không cung cấp style cụ thể. Style của chúng ta thêm vào chỉ
đơn giản là ghi đè lại những phần mặc định này.
10
css
HTML
js
Dưới đây là cách mà render tree của DOM & CSSOM ở trên thể hiện:
11
css
HTML
js
Cây hiển thị về cơ bản đưa DOM và CSSOM kết hợp lại với nhau để tạo ra bản
đồ đầy đủ về cách trang sẽ thực sự được bố cục và định dạng.
13
css
HTML
js Quá trình render nội dụng của TDW
Trình tự engine render thể hiện nội dung được thể hiện
trong biểu đồ dưới đây
14
css
HTML
js
Render cấu trúc cây – Thuộc tính CSS (thuộc tính style)
cũng được phân tích và tích hợp với cây DOM để tạo ra
"cây render". Đây là cây của các yếu tố trực quan như chiều
cao, chiều dài và màu sắc được sắp xếp phân cấp theo
cách chúng sẽ được trình bày trên TDW.
15
css
HTML
js
Render/Hiển thị
Sau khi tất cả các bước trên được thực hiện, cuối cùng trình duyệt web hiển thị lên
màn hình.
Có hai điều chính xảy ra ở đây…
•Bố cục/Layout
•Định dạng hoàn chỉnh/Paint
16
css
HTML
js
Vì là một ngôn ngữ lập trình, nên ta có thể thao túng nội dung của HTML như thêm,
xóa , sửa các phần tử HTML. Xử lý, tính toán thông tin và tương tác với người dùng
thông qua các sự kiện và thao tác chuột, bàn phím, ….
17
css
HTML
js
18
css
HTML
js
CÁCH SỬ DỤNG
DOM element:
DOM HTML:
DOM CSS:
DOM Event:
19
css
HTML
js
20
css
HTML
js
21
css
HTML
js
Câu lệnh được nhận biết khi nó kết thúc bằng dấu ; ví dụ như alert(“Hello World”);
Nhóm nhiều câu lệnh lại thành một khối bằng cách đặt các câu lệnh ở giữa cặp dấu
{}
22
css
HTML
js
Biến là những thành phần dùng để lưu trữ những giá trị dữ liệu mà chúng ta có thể
thay đổi giá trị trong quá trình dùng đến.
Ta gọi tên biến khi cần dùng. Để khai báo biến, ta dùng từ khóa var theo cú pháp
như sau:
var ten_bien; var biencuatoi = “Xin Chào”;
var ten_bien = giá trị; alert(biencuatoi);
Tên biến phải là duy nhất trong vùng hoạt động của nó
Tên biến được phân biệt khác nhau khi viết hoa viết thường (tức abc sẽ khác Abc)
Tên biến phải được bắt đầu bằng chữ cái hoặc dấu gạch chân _ hoặc ký tự $
23
css
HTML
js
24
css
HTML
js
Ví dụ:
var bien1 = 5; // Đây là ví dụ khai báo biến nhận vào giá trị là số
var bien2 = “Xin chào”;// Đây là ví dụ khai báo biến nhận vào giá trị là chuỗi
var bien3 = ‘Xin chào 2’;
// Đây cũng là ví dụ khai báo biến nhận vào giá trị là
chuỗi
Việc xác định kiểu dữ liệu của biến là tự động và dựa vào giá trị của biến, chúng ta
không cần khai báo kiểu dữ liệu khi khai báo biến. Kiểu dữ liệu trong JS mang nặng
tính chất tự hiểu.
25
css
HTML
js
= Phép gán, dùng để gán dữ liệu vào một biến, một đối tượng. Ví dụ: var b; b=10;
+ Phép cộng toán học, dùng để cộng 2 số lại với nhau. Ví dụ: var a=5; var b=3; var
c=a+b;
- Phép trừ toán học, dùng để trừ 2 số cho nhau. Ví dụ: var a=5; var b=3; var c=a-b;
* Phép nhân toán học, dùng để nhân 2 số lại với nhau. Ví dụ: var a=5; var b=3; var
c=a*b;
/ Phép chia toán học, dùng để chia 1 số cho 1 số khác. Ví dụ: var a=5; var b=3;
var c=a/b;
% Phép chia lấy dư, dùng để lấy phần dư của phép chia 2 số cho nhau. var a=5;
var b=a%2;
++ Phép cộng thêm 1 đơn vị viết tắt. Ví dụ: var a=5; a++;
-- Phép trừ đi 1 đơn vị viết tắt. Ví dụ: b=6; b--; 26
css
HTML
js
27
css
HTML
js
28
css
HTML
js
var a=5; var b=‘6’; var c = a + b; // c sẽ có giá trị là chuỗi ‘56’ khi số cộng chuỗi thì tất cả
thành chuỗi
var a=5; var b=‘6’; var c = a + 3 + b; // c sẽ có giá trị là chuỗi ‘86’. Do a+3=8 và 8+’6’ thì ra
chuỗi ‘86’
var a=5; var b=‘6’; var c = b+(a+5); // c sẽ có giá trị là chuỗi ‘610’. Do a+5 được tính trước ra
Nguyên
10 tắc chung, các phép tính vẫn tuân thủ nguyên tắc toán học, thứ tự ưu tiên:
1. Trong ngoặc ()
2. Nhân, chia
3. Cộng, trừ
4. Thứ tự từ trái sang phải
29
css
HTML
js
Chúng ta có thể khai báo biến kiểu boolean và chỉ định trực tiếp giá trị ban đầu của nó như sau:
var biencuatoi = true;
var biencuathienha = false;
Kiểu dữ liệu này được phục vụ cho các cấu trúc có điều kiện trong javascript
30
css
HTML
js
Các phép so sánh trên đều trả về 1 trong 2 giá trị là true hoặc false
31
css
HTML
js
Nguyên lý hoạt động của việc kết hợp nhiều điều kiện
true && true true
true && false false Đối với phép && chỉ khi tất cả true thì mới true
false && false false
-------------------------------------------
true || false true
true || true true Đối với phép || chỉ cần có 1 true là true
false || flase false
32
css
HTML
js
Ví dụ 1: Ví dụ 2:
var a = 5, b = 6, c = (a * b) / 2; var a = 5, b = 6, c = (a * b) / 2;
if ( a > c ) if ( b >= c ) {
alert (“A lớn hơn C”); b--;
else alert(“B lớn hơn hoặc bằng C nên B đã trừ
alert(“C lớn hơn A”); 1”);
33
css
HTML
js
Ví dụ 1: Ví dụ 2:
var a = 5, b = 6, c = (a * b) / 2; var a = 5, b = 6, c = (a * b) / 2;
if ( a > c && b > 6 ) if ( b >= c || a>=c ) {
alert (“A lớn hơn C và B cũng lớn hơn a--;
C”); b--;
alert(“B hoặc A đã lớn hơn hoặc bằng C”);
}
34
css
HTML
js
35
css
HTML
js
Đặt vấn đề …!
Vòng lặp là gì?
Vòng lặp là một công việc hoặc một nhóm công việc lặp đi lặp lại hữu hạn số lần
nhầm giải quyết một bài toán, một vấn đề nào đó.
Trong JS, vòng lặp được thể hiện là một câu lệnh hoặc một nhóm câu lệnh cứ lặp
lại lặp lại công việc của nó một số lần hữu hạn nhất định để giải quyết một vấn đề.
Trong JS có 2 loại vòng lặp chính, vòng lặp for và vòng lặp while
Sau này chúng ta sẽ được làm quen thêm một kiểu lặp khác là each (không học trong bài này)
36
css
HTML
js
37
css
HTML
js
Miễn là điều kiện lặp còn đúng thì các lệnh Tượng tự như cú pháp 1. Nhưng cú pháp
bị lặp sẽ còn thực thi mãi. Cú pháp này sẽ này sẽ chạy các câu lệnh bị lặp trước khi
kiểm tra điều kiện trước. Nên khả năng sẽ kiểm tra điều kiện, nên tối thiểu vòng lặp
không có lặp xãy ra nếu ngay từ đầu điều phải chạy 1 lần.
kiện đã trả về false.
38
css
HTML
js
Câu lệnh break; sẽ kết thúc vòng lặp ngay Câu lệnh continue; có tác dụng làm vòng
khi nó xuất hiện. Vòng lặp sẽ bị dừng và lặp bỏ qua những câu lệnh còn lại chưa
xem như đã chạy xong. chạy trong vòng lặp và chuyển tiếp sang
bước lặp tiếp theo.
Lệnh break; và lệnh continue; có tác dụng giống nhau ở mọi loại vòng lặp
39
css
HTML
js
Đặt vấn đề …!
Như tiêu đề bài học, chúng ta sẽ học cách tiến hành những xử lý khác nhau cho những giá trị
khác nhau. Về cơ bản thì việc này hoàn toàn có thể sử dụng cấu trúc if để thực hiện, tuy nhiên
với danh sách các giá trị biết trước và với một số lượng câu if else quá nhiều sẽ làm code của
bạn trông không tường minh và dễ mắc lỗi logic hơn.
Do đó, câu lệnh lựa chọn giá trị switch … case ra đời nhầm giải quyết vấn đề trên
40
css
HTML
js
Giải thích:
bien là biến được đem ra để so sánh với các value
value có thể là số hoặc chuỗi
Mỗi case tương ứng với một sự so sánh bien==value. Nếu true thì các câu lệnh bên trong {} sau case sẽ
thực thi.
Nếu tất cả case đều false thì lúc đó default sẽ là true
41
css
HTML
js
Giải thích: dạng cú pháp này cũng tương tự dạng cơ bản. Tuy nhiên, dạng này cho phép bạn có thể so sánh
với nhiều giá trị dưới dạng HOẶC.
Như cú pháp ví dụ trên thì khi bien bằng value_1 hoặc value_2 thì sẽ chạy câu lệnh 1
42
css
HTML
js
Giải thích: với dạng cú pháp này, thì khi bien bằng value 1 thì cả câu lệnh 1 và câu lệnh 2 đều được thực hiện.
Còn nếu bien bằng value 2 thì chỉ câu lệnh 2 được thực hiện.
43
css
HTML
js
44
css
HTML
js
Nguyên tắc đặt tên hàm (tương tự nguyên tắc đặt tên biến)
Tên phải bắt đầu bằng chữ cái hoặc ký tự _ hoặc ký tự $
Tên là duy nhất
Viết hoa và viết thường sẽ là 2 tên khác nhau
45
css
HTML
js
46
css
HTML
js
Khi hàm có sử dụng return để trả về giá trị gì đó, ta có thể hứng giá trị này và gán nó vào 1 biến.
Giá trị trả về có kiểu gì thì biến số nhận giá trị sẽ có kiểu đó.
47
css
HTML
js
Ví dụ: trong quá trình tính toán, một có sử dụng phép chia nhưng lại không kiểm soát tốt các
biến dẫn tới tình trạng chia cho 0. Và dĩ nhiên phép chia cho 0 sẽ báo lỗi và chương trình bị
ngưng. Hoặc bạn sử dụng một biến mà chưa hề có khai báo, chương trình cũng sẽ ngưng, …
rất nhiều lỗi có thể phát sinh và làm ngưng chương trình.
48
css
HTML
js
Thông qua cấu trúc điều khiển lỗi, bạn có thể chỉ định cho Javascript Engine cách xử lý ra sao
đối với lỗi đó và chương trình sẽ được chạy tiếp tục mà không bị dừng lại.
49
css
HTML
js
50
css
HTML
js
51
css
HTML
js
Khi đó, biến kiểu Array được xem là một danh sách có nhiều giá trị được lưu trữ. Chúng ta sẽ
truy xuất các giá trị này thông qua thứ tự lưu trữ hoặc từ khóa lưu trữ.
52
css
HTML
js
Biến xe_may được khai báo là một mảng có 3 giá trị là 3 chuỗi. Biến bien_a được khai báo là
một mảng có 4 giá trị, 2 giá trị chuỗi và 2 giá trị số. Giá trị lưu trong mảng có thể không
cần giống kiểu nhau.
Theo mặc định, thứ tự của các giá trị sẽ được tính từ 0 và tăng dần theo hướng từ trái sang
phải.
53
css
HTML
js
Với cách khai báo này, chúng ta có thể chủ động thêm giá trị vào mảng một cách chủ động và
điều khiển được thứ tự của từng giá trị rõ ràng và tường minh hơn.
Cách đọc giá trị ra cũng tương tự, chỉ cần cung cấp thứ tự giá trị cần lấy khi gọi tên mảng. Ví dụ
xe_may[2] sẽ có “Wave”
54
css
HTML
js
Cách khai báo này cho phép chúng ta dùng chuỗi làm khóa nhận dạng để lưu trữ giá trị tương
ứng. Khi cần gọi ra, chúng ta cung cấp lại khóa nhận dạng thay vì thứ tự.
Ví dụ: xe_may[“key1”] sẽ là “Yamaha”
55
css
HTML
js
56
css
HTML
js
Biến toàn cục (global) là biến được khai báo bên ngoài tất cả hàm và phương thức. Loại biến
này có thể được gọi và sử dụng ở mọi nơi miễn là thỏa mãn điều kiện câu lệnh sử dụng phải
được thực thi sau câu lệnh khai báo.
Biến toàn cục sẽ tồn tại xuyên suốt quá trình tồn tại của chương trình cho dù bạn có sử dụng
hay không sử dụng. Do đó, nên xem xét kỹ lưỡng khi nào cần và không cần một biến toàn cục
để tránh lãng phí bộ nhớ trên thiết bị người dùng trong quá trình lưu trữ nó.
57
css
HTML
js
Cùng 1 lúc chỉ có thể sử dụng “ ” hoặc ‘ ’ cho nên nếu bạn dùng “ ” thì nếu nội dung có dấu ‘ ‘ thì
nó cũng được xem là nội dung của chuỗi. Xem ví dụ:
var bien = “Đây là câu nói ‘phổ biến’ nhất thể giới” ;
Lúc này bien sẽ có giá trị là: Đây là câu nói ‘phổ biến’ nhất thể giới
Ví dụ khác:
var bien = ‘Đây là câu nói “phổ biến” nhất thể giới’ ;
Lúc này bien sẽ có giá trị là: Đây là câu nói “phổ biến” nhất thể giới
58
css
HTML
js
Ký tự đặc biệt
Nếu bạn dùng nháy kép để nhận dạng chuỗi nhưng cũng muốn có nội dung có dấu nháy kép thì
sao? Khi đó, ta dùng cú pháp escape character để cung cấp giá trị chúng ta muốn vào nội dung
chuỗi mà không làm sai câu lệnh. Dưới đây là danh sách các ký tự đặc biệt và cách khai báo:
59
css
HTML
js
Str.slide(start, end) cắt chuỗi con trong chuỗi Str từ vị trí start tới vị trí trước end
Str.substring(start, end) cắt chuỗi con trong chuỗi Str từ vị trí start tới vị trí trước end
Str.substr(start, length) cắt chuỗi con trong chuỗi Str từ vị trí start lấy length ký tự
60
css
HTML
js
Str.replace(Str2, Str3) thay thế Str2 đầu tiên tìm thấy đầu tiên trong Str thành Str3
Str.toUpperCase() Return chuỗi VIẾT HOA TOÀN BỘ của chuỗi Str
Str.toLowerCase() Return chuỗi viết thường toàn bộ của chuỗi Str
Str.concat(str2, str3) Return kết quả cộng của Str + str2 + str3 (có thể có str4, 5, 6 ….)
Str.charAt(index) Return ký tự tại vị trí index trong chuỗi Str
Str.charCodeAt(index) Return mã unicode của ký tự tại vị trí index trong chuỗi Str
Str[index] (xem chuỗi là mảng) Return ký tự tại vị trí index trong chuỗi Str (readonly)
61
css
HTML
js
Str.split(Str2) Cắt chuỗi Str thành mảng các chuỗi nhỏ phân biệt bởi Str2
Ví dụ:
var str = “tôi không phải là không muốn” ;
var str_array = str.split(“không”) ;
// Lúc này biến str_array sẽ có các giá trị “tôi ” , “ phải là ” và “ muốn”
alert (str_array[1]) ; // sẽ hiển thị kết quả: phải là
62
css
HTML
js
Số không có dấu cách thập phân được xem là số nguyên (int) và số có dấu cách thập phân
được xem là số thực (float)
Ví dụ:
var so_a = 1505 ; // số nguyên (int)
var so_b = 15.8 ; // số thực (float)
Số lượng số đi sau dấu thập phân lớn nhất là 17 số.
63
css
HTML
js
64
css
HTML
js
Hàm Number(data);
Đây là hàm toàn cục được định nghĩa có sẵn và dùng để chuyển dữ liệu thành kiểu số.
65
css
HTML
js
Hàm parseInt(Str);
Đây là hàm toàn cục được định nghĩa có sẵn và dùng để chuyển dữ liệu chuỗi thành kiểu số
nguyên (int).
66
css
HTML
js
Hàm parseFloat(Str);
Đây là hàm toàn cục được định nghĩa có sẵn và dùng để chuyển dữ liệu chuỗi thành kiểu số thực
(float).
67
css
HTML
js
68
css
HTML
js
70
css
HTML
js
71
css
HTML
js
72
css
HTML
js
73
css
HTML
js
74
css
HTML
js
75
css
HTML
js
76
css
HTML
js
77
css
HTML
js
DOM là viết tắt của Document Object Model. Là mô hình quản lý đối tượng thẻ HTML trong một tài liệu
HTML theo cấu trúc cây dựa trên mối quan hệ cha- con giữa các thẻ HTML và nội dung của thẻ HTML.
DOM sẽ cụ thể hóa chi tiết từng đối tượng HTML cùng nội dung và thuộc tính của nó thành những OBJECT
giúp cho Javascript có thể dễ dàng thực hiện các thao tác nhầm tác động đến nội dung, thành phần cũng
như thuộc tính của từng OBJECT cụ thể trong DOM.
78
css
HTML
js
79
css
HTML
js
1. JS DOM SELECTOR : Học cách để xác định một hoặc nhiều object trong DOM
2. JS DOM CONTENT : Cách thao tác với nội dung của object trong DOM
3. JS DOM ATTRIBUTES : Cách thao tác với thuộc tính của object trong DOM
4. JS DOM CSS : Cách thao tác với Style của object trong DOM
5. JS DOM FORM VALUE : Cách thao tác với dữ liệu của object trong DOM về FORM
80
css
HTML
js
<html>
<body>
<h1 id="main-content"></h1>
<script language="javascript">
document.getElementById("main-content").innerHTML = "Chào
mừng các bạn đến với website học lập trình online freetuts.net"
</script>
</body>
</html>
82
css
HTML
js
85
css
HTML
js
86
css
HTML
js
Danh sách tên của các JS Style CSS sẽ được liệt kê ở cuối SLIDE bài này, các
bạn có thể dùng để tham chiếu và sử dụng khi cần
87
css
HTML
js
88
css
HTML
js
89
css
HTML
js
90
css
HTML
js
91
css
HTML
js
92
css
HTML
js
Trong JS, các biến mà có kèm theo thuộc tính (property) hoặc phương thức (method) gọi chung là biến
kiểu object.
93
css
HTML
js
KẾT LUẬN:
Định nghĩa object là mô tả về object, các property và method mà object cần phải có.
Object là những thực thể được tạo ra từ định nghĩa của nó.
94
css
HTML
js
95
css
HTML
js
Ví dụ thực tiễn
function PhepTinh(No1, No2){ var ob = new PhepTinh(15, 10);
this.A = No1 ; var ketquacong = ob.CongAB();
this.B = No2 ; alert(ketquacong);
this.CongAB = function(){ return this.A + this.B; }
this.TruAB = function(){ return this.A - this.B; }
this.TruBA = function(){ return this.B - this.A; }
this.NhanAB = function(){ return this.A * this.B; }
this.ChiaAB = function(){ return this.A / this.B; }
this.ChiaBA = function(){ return this.B / this.A; }
}
96
css
HTML
js
Khi Javascript được tích hợp vào HTML thì Javascript có thể “bắt được” những events đó và điều khiển
chúng theo ý muốn của người lập trình. Khi đó, ta có thể làm cho trang HTML có khả năng tương tác với
người dùng, giúp cho trang HTML sinh động hơn, vượt qua được giới hạn của một “tài liệu” và trở thành
như một giao diện ứng dụng (application interface)
97
css
HTML
js
Event Event
Listene Handle
r r
98
css
HTML
js
obj.TenEvent = function(){} viết function mới tại chỗ gán cho event listener
99
css
HTML
js
100
css
HTML
js
JSON là viết tắt của Javascript Object Notation, là một bộ qui tắc về cách trình bày và mô tả dữ liệu trong
một chuỗi lớn thống nhất được gọi chung là chuỗi JSON.
101
css
HTML
js
102
css
HTML
js
{
“data” :
[
125,
{ “name” : “Đặng Văn Lel” , “age” : 30 } ,
{ “name” : “Thư Viện Lập Trình” , “age” : 3 } ,
“Chuỗi gì đó”
],
“count” : 3000,
“more_infor” : { “status” : 200 , “message” : “Mọi thứ ổn” }
}
103
css
HTML
js
var JSON_str = ‘{ “name” : “Đặng Văn Lel” , “age” : 30 }’ ; // đây là chuỗi JSON
var JSON_obj = JSON.parse(JSON_str) ; // đây là biến JSON được tạo từ chuỗi JSON
alert(JSON_obj.name) ; // truy cập vào thuộc tính JSON bằng tên thuộc tính
104
css
HTML
js
var JSON_str = ‘{ “name” : “Đặng Văn Lel” , “age” : 30 }’ ; // đây là chuỗi JSON
var JSON_obj = JSON.parse(JSON_str) ; // đây là biến JSON được tạo từ chuỗi JSON
JSON_obj.name = “Họ và Tên mới” ; // truy cập vào thuộc tính JSON bằng tên thuộc tính và đổi giá trị
var JSON_str_2 = JSON.stringify(JSON_obj); // tạo chuỗi JSON từ JSON object
105
css
HTML
js
AJAX không phải một ngôn ngữ lập trình, nó chỉ đơn giản là tên gọi của công nghệ sử dụng kết hợp những
yếu tố sau đâu:
Một hệ thống có tên XMLHttpRequest được tích hợp sẵn trong trình duyệt nhằm mục
đích gửi yêu cầu (request) và nhận dữ liệu (response) từ server một cách im lặng.
Javascript và HTML DOM (dùng để hiển thị dữ liệu hoặc xử lý dữ liệu nhận được từ
server thông qua AJAX)
106
css
HTML
js
AJAX REQUEST cũng gửi REQUEST lên server bằng một URL, nhưng quá trình này diễn ra ngầm, không ảnh
hưởng gì tới nội dung đang xem, khi nhận được RESPONSE từ server (dạng TEXT), AJAX sẽ cho phép chúng
ta sử dụng JAVASCRIPT để xử lý kết quả này và tác động lên HTML DOM làm thay đổi ngay lập tức một số
bộ phận thông tin trên giao diện.
107
css
HTML
js
XMLHttpRequest SERVER
Tạo
EventListener
chờ sự kiện
nhận Response
Handler
Response
108
css
HTML
js
109
css
HTML
js
// Tạo form dữ liệu (nếu cần) và đặt tên biến là form_data để gửi kèm theo Request
var form_data = new FormData();
// Dùng lệnh .append(key, value) để đưa giá trị và tên của nó vào form đã tạo
form_data.append(“username” , ”dangvanlel”);
form_data.append(“password” , ”123456”);
110
css
HTML
js
// Cài đặt thời gian tối đa chờ Response sau khi đã gửi Request (nếu cần) (millisecond)
xhr.timeout = 30000;
// Bạn sẽ muốn xử lý gì khi timeout xãy ra? Cài event listener cho sự kiện timeout (nếu cần)
xhr.ontimeout = function(){
// code chạy khi hết thời gian chờ
}
111
css
HTML
js
// Khi cần thêm (hoặc đổi) dữ liệu Request Header, có thể dùng lệnh sau để thêm vào
xhr. setRequestHeader(“Key” , “Value”);
// Ví dụ
xhr. setRequestHeader(“Content-Type” , “application/x-www-form-urlencoded”);
xhr. setRequestHeader(“Key-Cua-Toi” , “Giá trị gì đó”);
112
css
HTML
js
Asyn đồng bộ nghĩa là JS sẽ chờ Response rồi mới chạy tiếp. Còn Asyn bất đồng bộ nghĩa là sau khi đã
gửi Request thì JS sẽ chạy tiếp các câu lệnh khác mà không chờ Response.
113
css
HTML
js
xhr.onreadystatechange = function(){
if (xhr.readyState == 4 && xhr.status == 200) {
// phần code ở đây sẽ chạy khi nhận được kết quả và không có lỗi
var ketqua = xhr.responseText; // Biến ketqua sẽ chứa nội dung trả về của server
}
}
114
css
HTML
js
115
css
HTML
js
HTTP Status Message chia làm 5 nhóm giá trị tương ứng với 5 loại phản hồi kết quả khác nhau. Cụ thể:
Nhóm thông tin - Information Nhóm thành công - Successful Nhóm chuyển hướng - Redirection
100, 101, 103 200 206 300 308
Nhóm lỗi client - Client Error Nhóm lỗi server - Server Error
400 403, 404 417 500 505, 511
----- -----
403 : server từ chối trả lời Các mã lỗi từ 500 trở lên có nghĩa là code
404 : không tìm thấy nội dung gây ra lỗi hoặc xung đột do web server
116
css
HTML
js
// Gửi request bao gồm dữ liệu form. Với form_data là biến chứa form dữ liệu (xem #1 ở slide6)
xhr.send(form_data);
// Gửi request bao gồm dữ liệu được cung cấp dưới dạng chuỗi theo nguyên tắc key=value và kết nối bởi ký tự &
xhr.send(“key_1=value_1&key_2=value_2&key_3=value_3”);
117