Professional Documents
Culture Documents
Ajax
Ajax
trang ang ng dng. Mt trong nhng cng ngh tr nn rt nh m trong thi gian
gn y l ng dng web c gi l AJAX. N l tng hp ca nhiu cng ngh khc
nhau.
AJAX l ch vit tt ca Asynchronous JavaScript and XML. Nhng cng ngh c trong
mt gii php AJAX bao gm
JavaScript dng tng tc vi ngi dng hoc cc s kin lin quan n trnh
duyt.
i tng XMLHttpRequest, cho php nhng cu lnh truy vn c gi n
server m khng lm gin on nhng tc v khc ca trnh duyt
XML trn server, hoc nhng nh dng d liu tng t nh HTML v JSON
Thm JavaScript, dng chuyn i d liu t server v hin th n ln trang
web.
Cng ngh AJAX c ca tng nh l v cu tinh ca th gii web, n bin nhng trang
web tnh thnh nhng ng dng c tnh tng tc cao. Rt nhiu frameworks c to ra
gip cc lp trnh vin hc cch s dng n, chnh bi s khng nht qun ca trnh
duyt trong vic ng dng i tng XMLHttpRequest, jQuery cng khng phi l ngoi
l.
Chng ta s xem xem AJAX c thc s k diu nh ngi ta hay ni khng.
Ti d liu khi c yu cu
3
4 </div>
5 <div class="letter" id="letter-b">
6 <h3><a href="#">B</a></h3>
7 </div>
<div class="letter" id="letter-c">
8 <h3><a href="#">C</a></h3>
9 </div>
10<div class="letter" id="letter-d">
11<h3><a href="#">D</a></h3>
12</div>
</div>
13
14
Thm mt cht CSS, chng ta c mt trang nh sau
<div class="entry">
<h3 class="term">ABDICATION</h3>
<div class="part">n.</div>
<div class="definition">
An act whereby a sovereign attests his sense of the high
temperature of the throne.
<div class="quote">
<div class="quote-line">Poor Isabella's Dead, whose
abdication</div>
<div class="quote-line">Set all tongues wagging in the
Spanish nation.</div>
10
11
12
13<div class="quote-line">For that performance 'twere
14unfair to scold her:</div>
15<div class="quote-line">She wisely left a throne too
hot to hold her.</div>
16<div class="quote-line">To History she'll be no royal
17riddle —</div>
18<div class="quote-line">Merely a plain parched pea that
19jumped the griddle.</div>
class="quote-author">G.J.</div>
20<div
</div>
21</div>
22</div>
23<div class="entry">
24<h3 class="term">ABSOLUTE</h3>
<div class="part">adj.</div>
25<div class="definition">
26Independent, irresponsible. An absolute monarchy is one
27in which the sovereign does as he pleases so long as he
28pleases the assassins. Not many absolute monarchies are
29left, most of them having been replaced by limited
monarchies, where the sovereign's power for evil (and for
30good) is greatly curtailed, and by republics, which are
31governed by chance.
32</div>
33</div>
34
35
36
y l hnh m chng ta s c c, tt nhin n nhn hi ci v cha c nh dng g
ht.
$(document).ready(function() {
$('#letter-b a').click(function() {
$.getJSON('b.json', function(data) {
$('#dictionary').empty();
$.each(data, function(entryIndex, entry) {
var html = '<div class="entry">';
html += '<h3 class="term">' + entry['term'] + '</h3>';
html += '<div class="part">' + entry['part'] + '</div>';
7
8
9 html += '<div class="definition">';
html += entry['definition'];
10html += '</div>';
11html += '</div>';
12$('#dictionary').append(html);
13});
14});
return false;
15});
16});
17
18
Trc khi vng l p bt u, chng ta lm rng th <div id=dictionary>, do v y
chng ta c th chn vo m HTML va to c. Sau chng ta s dng hm $.each()
kim tra tng phn t m t, xy dng cu trc HTML da vo n i dung ca biu .
Cui cng chng ta bin on m HTML thnh cy DOM bng cch gn n vo th
<div>
Lu : cch ny gia s rng d li u tai v l an ton s dng vi HTML, n khng
c c nhng ky hi u nh kiu <.
By gi ch cn phn trch dn ca mc t trong t in, bng cch s dng m t vng
l p $.each() na.
1 $(document).ready(function() {
2 $('#letter-b a').click(function() {
$.getJSON('b.json', function(data) {
3 $('#dictionary').empty();
4 $.each(data, function(entryIndex, entry) {
5 var html = '<div class="entry">';
6 html += '<h3 class="term">' + entry['term'] + '</h3>';
html += '<div class="part">' + entry['part'] + '</div>';
7 html += '<div class="definition">';
8 html += entry['definition'];
9 if (entry['quote']) {
10html += '<div class="quote">';
11$.each(entry['quote'], function(lineIndex, line) {
html += '<div class="quote-line">' + line + '</div>';
12});
13if (entry['author']) {
14html += '<div class="quote-author">' + entry['author'] + '</div>';
15}
+= '</div>';
16html
}
17html += '</div>';
18html += '</div>';
19$('#dictionary').append(html);
20});
});
21return false;
22
23
24
});
25});
26
27
28
By gi bn c th th nhp chu t vo ch B xem th kt qu
Lu : inh dng JSON rt ngn gon nhng nghim ng t. Mi du ngo c, du nhy hay
du phai u phai y v chinh xc, nu khng t p tin se khng c tai. Trong phn
ln cc trnh duy t, th m chi n con khng bo li m ca on ma hon ton khng chy
m t cch m thm.
Chay m t oan ma
27
28
29
30
31
32$.each(entries, function() {
33html += '<div class="entry">';
34html += '<h3 class="term">' + this['term'] + '</h3>';
35html += '<div class="part">' + this['part'] + '</div>';
36html += '<div class="definition">' + this['definition'] + '</div>';
html += '</div>';
37});
38$('#dictionary').html(html);
39},
40{
"COMFORT",
41"term":
"part": "n.",
42"definition": "A state of mind produced by..."
43},
44{
45"term": "CORSAIR",
"part": "n.",
46"definition": "A politician of the seas."
47}
48];
49var html = '';
50$.each(entries, function() {
html += '<div class="entry">';
51html += '<h3 class="term">' + this['term'] + '</h3>';
52html += '<div class="part">' + this['part'] + '</div>';
53html += '<div class="definition">' + this['definition'] + '</div>';
54html += '</div>';
55});
$('#dictionary').html(html);
56
57
58
59
60
61
Bn th nhn vo ch ci C xem kt qu.
Ti ti li u
XML
17
18
19
20<line>All hail, Delusion! Were it not for thee</line>
21<line>The world turned topsy-turvy we should see;
22</line>
23<line>For Vice, respectable with cleanly fancies,
24</line>
<line>Would fly abandoned Virtue's gross advances.
25</line>
26</quote>
27</entry>
28<entry term="DIE" part="n.">
29<definition>
The singular of "dice." We seldom hear the word,
30because there is a prohibitory proverb, "Never say
31die." At long intervals, however, some one says: "The
32die is cast," which is not true, for it is cut. The
33word is found in an immortal couplet by that eminent
and domestic economist, Senator Depew:
34poet
</definition>
35<quote>
36<line>A cube of cheese no larger than a die</line>
37<line>May bait the trap to catch a nibbling mie.</line>
38</quote>
</entry>
39</entries>
40
41
42
43
Tt nhin d li u ny c th c biu th bng nhiu cch, v m t s phn rt ging vi
cu trc m chng ta lm vi HTML v JSON trc y. Nhng trong v d ny bn
s c lm quen vi m t vi chc nng ca XML c thit k con ngi cn c th
hiu c, nh l cch s dng thu c tnh cho term v part thay v dng th.
Chng ta cng bt u hm vi cch quen thu c
1$(document).ready(function() {
2$('#letter-d a').click(function() {
3$.get('d.xml', function(data) {
4});
5return false;
});
6});
7
Ln ny chng ta s dng hm $.get(). Ni chung, hm ny ch n thun l truy xut t p
tin a ch URL cho trc v cung cp m t on ch trng khng nh dng cho hm
truy hi. Nhng nu phn hi li l nh dng XML da vo MINE type ca server cung
cp, hm truy hi s nh n c cy XML DOM.
Cng may cho chng ta l jQuery c kh nng di chuyn rt tt trong DOM. Chng ta c
th s dng phng thc .find(), .filter() v nhng phng thc di chuyn khc trong ti
li u XML y nh cch m chng ta lm vi c vi HTML.
1
2
3
4 $(document).ready(function() {
5 $('#letter-d a').click(function() {
$.get('d.xml', function(data) {
6 $('#dictionary').empty();
7 $(data).find('entry').each(function() {
8 var $entry = $(this);
9 var html = '<div class="entry">';
+= '<h3 class="term">' + $entry.attr('term')
10html
+ '</h3>';
11html += '<div class="part">' + $entry.attr('part')
12+ '</div>';
13html += '<div class="definition">';
14html += $entry.find('definition').text();
var $quote = $entry.find('quote');
15if ($quote.length) {
16html += '<div class="quote">';
17$quote.find('line').each(function() {
18html += '<div class="quote-line">'
19+ $(this).text() + '</div>';
});
20if ($quote.attr('author'))
21html += '<div class="quote-author">'
22+ $quote.attr('author') + '</div>';
23}
html += '</div>';
24}
25html += '</div>';
26html += '</div>';
27$('#dictionary').append($(html));
28});
});
29return false;
30});
31});
32
33
34
Bn nhn th ch D xem kt qu
Phn 2
La chon inh dang d li u
Truyn d li u
n server
minh ha cho qu trnh giao tip gia ngi dng v server, chng ta s vit m t
on m m n c th ch gi m t mc t trong t in n trnh duy t cho mi m t
l nh truy vn. Mc t c chn s da vo tham s c gi qua trnh duy t. M ca
chng ta s ly d li u t cu trc d li u trong nh sau:
1 <?php
2
3
4
5 $entries = array(
'EAVESDROP' => array(
6 'part' => 'v.i.',
7 'definition' => 'Secretly to overhear a catalogue of the
8 crimes and vices of another or yourself.',
9 'quote' => array(
10'A lady with one of her ears applied',
'To an open keyhole heard, inside,',
11'Two female gossips in converse free —',
12'The subject engaging them was she.',
13'"I think," said one, "and my husband thinks',
14'That she\'s a prying, inquisitive minx!"',
soon as no more of it she could hear',
15'As
'The lady, indignant, removed her ear.',
16'"I will not stay," she said, with a pout,',
17'"To hear my character lied about!"',
18),
19'author' => 'Gopete Sherany',
),
20'EDIBLE' => array(
21'part' => 'adj.',
22'definition' => 'Good to eat, and wholesome to digest, as
23a worm to a toad, a toad to a snake, a snake to a pig,
24a pig to a man, and a man to a worm.',
),
25'EDUCATION' => array(
26'part' => 'n.',
27'definition' => 'That which discloses to the wise and
28disguises from the foolish their lack of
29understanding.',
),
30);
31?>
32
33
34
trong nhng ng dng th t s th d li u phi c lu tr trong c s d li u v ch
c ti khi hoi. Bi v d li u l m t phn ca on m trn cho nn vi c vit m
ly d li u ra kh n gin. Chng ta s xem xt d li u c to ra v vit m
HTML hin th n:
1
2
3
4
5
6
7
<?php
$term = strtoupper($_REQUEST['term']);
if (isset($entries[$term])) {
$entry = $entries[$term];
$html = '<div class="entry">';
$html .= '<h3 class="term">';
$html .= $term;
$html .= '</h3>';
$html .= '<div class="part">';
8
9
10
.= $entry['part'];
11$html
$html .= '</div>';
12$html .= '<div class="definition">';
13$html .= $entry['definition'];
14if (isset($entry['quote'])) {
15$html .= '<div class="quote">';
foreach ($entry['quote'] as $line) {
16$html .= '<div class="quote-line">'. $line .'</div>';
17}
18if (isset($entry['author'])) {
19$html .= '<div class="quote-author">'. $entry['author']
20.'</div>';
}
21$html .= '</div>';
22}
23$html .= '</div>';
24$html .= '</div>';
print($html);
25}
26?>
27
28
29
By gi khi on m c truy vn th t p e.php c gi, v n s tr v m t on
HTML ph hp vi iu ki n c gi qua tham s ca GET. V d khi bn truy c p
on m vi e.php?term=eavesdrop, chng ta s c c.
11
12<li><a href="e.php?term=Envy">Envy</a></li>
13<li><a href="e.php?term=Epitaph">Epitaph</a></li>
14<li><a href="e.php?term=Evangelist">Evangelist</a></li>
15</ul>
</div>
16
17
By gi chng ta cn m JavaScript gi n PHP vi tham s ph hp. Chng ta c th
lm c vi c ny vi c ch .load(), gn chui truy vn vo URL v sau th truy xut
d li u trc tip vi a ch nh kiu e.php?term=eavesdrop. Tuy nhin, thay v lm nh
v y chng ta s s dng jQuery xy dng chui truy vn da vo biu m ta cung
cp cho hm $.get():
1
$(document).ready(function() {
2$('#letter-e a').click(function() {
3$.get('e.php', {'term': $(this).text()}, function(data) {
4$('#dictionary').html(data);
5});
6return false;
});
7});
8
Ti gi chng ta thy nhng giao tc AJAX m jQuery cung cp, cch lm vi c ca
hm ny rt quen thu c. iu khc bi t duy nht l tham s th 2, n cho php chng
ta cung cp m t biu key-value v n l m t phn ca chui truy vn. Trong trng
hp trn, gi tr key lun l term nhng value s c ly t ch ca mi ng lin kt.
Nn nu by gi bn nhp chu t vo ng lin kt u tin trong danh sch th nh
ngha ca t s xut hi n.
Truy vn HTTP s dng phng thc POST gn nh tng ng vi phng thc GET.
M t trong nhng khc bi t d thy nht l phng thc GET t tham s ca n vo
chui truy vn ca URL. Cn POST th khng. Tuy nhin trong cc cu c gi ca AJAX,
im khc bi t ny cng b n i vi ngi dng. Ni chung, l do chnh chn
phng thc ny thay v phng thc khc l ph hp vi chun ca server, hoc
truyn ti m t lng d li u ln. Phng thc GET c gii hn nghim khc hn. Chng
ta vit m PHP trong v d ny sao cho n c th lm vi c c vi c 2 phng thc,
chng ta c th chuyn t GET sang POST ch bng cch thay i phng thc
jQuery m chng ta gi:
1
$(document).ready(function() {
2$('#letter-e a').click(function() {
3$.post('e.php', {'term': $(this).text()}, function(data) {
4$('#dictionary').html(data);
5});
6return false;
});
7});
8
Cc tham s th vn v y nhng l nh truy vn s c gi qua POST. Chng ta cng c
th n gin ha on m hn na bng cch s dng phng thc .load(). Phng thc
ny theo m c nh l s dng POST khi n c cung cp m t biu tham s.
1$(document).ready(function() {
2$('#letter-e a').click(function() {
3$('#dictionary').load('e.php', {'term': $(this).text()});
4return false;
5});
});
6
Phin bn m ngn hn ny vn c tc dng tng t khi ch a c nhp chu t.
Sp xp th t form
c cch gip chng ta trong trng hp ny. Phng thc .serialize() hot ng trn m t
i tng jQuery v chuyn nhng phn t DOM ph hp thnh chui truy vn v
chuyn n cng vi AJAX truy vn. Chng ta c th vit m cho b x l form nh sau:
1
$(document).ready(function() {
2$('#letter-f form').submit(function() {
3$.get('f.php', $(this).serialize(), function(data) {
4$('#dictionary').html(data);
5});
6return false;
});
7});
8
By gi on m c th gi form, cho d s lng cc trng nh p li u c tng. Khi
chng ta mun tm kim, nhng mc t ph hp s c hin th.
Nn chu n l n
h truy vn
Bi v y ch l tnh nng lm cho trang thm ep cho nhng ngi dng c trnh duy t
hi n i, do v y chng ta s khng chn on m HTML ny trc tip vo trang. Bi v
chng ta ch mun n hin th vi nhng ai c b t JavaScript, cho nn chng ta s chn
n bng jQuery.
1$(document).ready(function() {
2$('<div id="loading">Loading...</div>')
3.insertBefore('#dictionary')
4});
Chng ta s khai bo trong CSS cho th div ny c display: none; cho khi trang c
ti, th thng bo s b n i. n hin th ng lc mnh cn, chng ta ch cn ng k
n vi chc nng quan st vi .ajaxStart():
1$(document).ready(function() {
2$('<div id="loading">Loading...</div>')
3.insertBefore('#dictionary')
4.ajaxStart(function() {
5$(this).show();
});
6});
7
Chng ta kt hp phng thc .hide() lun vo y
1
{
2$(document).ready(function()
$('<div id="loading">Loading...</div>')
3.insertBefore('#dictionary')
4.ajaxStart(function() {
5$(this).show();
6}).ajaxStop(function() {
$(this).hide();
7});
8});
9
Nh v y chng ta c bng thng bo.
M t ln na bn cng nn lu rng nhng phng thc ny khng lin quan g n
cch m giao tip AJAX bt u. Chnh phng thc .load() c gn cho ch A v
.getJSON() c gn cho ch B lm cho giao tip AJAX xy ra.
Trong trng hp ny, t p tnh ton cc l iu chng ta mun. Tuy nhin nu chng ta
mun c th hn na, chng ta c vi la chn s dng. M t vi chc nng quan st
nh, .ajaxError(), n s gi cho hm truy hi m t tham chiu n i tng
XMLHttpRequest. Ci ny c th dng phn bi t gia cc l nh truy vn vi nhau, v
cung cp nhng t p tnh khc nhau. c nhng cch x l c th hn bn c th s
dng hm $.ajax() cp thp, m chng ta s bn ti phn di.
Tuy nhin cch ph bin nht giao tip vi l nh truy vn l hm truy hi thnh cng,
m chng ta ni n trn. Chng ta s dng n trong m t vi nhng v d trn
x l d li u quay li t server v cho hin th kt qu ln trang web. Tt nhin n cng
c th c s dng cho nhng thng tin phn hi khc. Hy xem li v d v .load():
1$(document).ready(function() {
2$('#letter-a a').click(function() {
3$('#dictionary').load('a.html');
4return false;
5});
});
6
Chng ta c th ci tin m t cht y bng cch lm cho n i dung t t hi n ra thay v
m m t pht. Phng thc .load() c th ly vo m t hm truy hi v kch hot n khi
hon thnh.
1
$(document).ready(function() {
2$('#letter-a a').click(function() {
3$('#dictionary').hide().load('a.html', function() {
4$(this).fadeIn();
5});
6return false;
});
7});
8
Trc tin ta n i phn t ch, v sau th khi ng qu trnh ti. Khi qu trnh ti
hon thnh, chng ta s dng hm truy hi cho phn t va to hi n ra t t.
AJAX v s kin
3
y bin $data cha m t chui lm i di n cho m t t p JSON. Khi on m ny
c gi, m t tham s chui truy vn callback c gn vo trc t p kt qu v s
c tr v cho ngi dng.
minh ho cho k thu t ny, chng ta ch cn sa i m t cht v d v JSON trn
gi ngun d li u t xa. Hm $.getJSON() t n dng k t gi ch c bi t?,
, lm
c vi c ny.
1
2
3 $(document).ready(function() {
4 var url = 'http://examples.learningjquery.com/jsonp/g.php';
5 $('#letter-g a').click(function() { $.getJSON(url + '?callback=?',
6 function(data) {
$('#dictionary').empty();
7 $.each(data, function(entryIndex, entry) {
8 var html = '<div class="entry">';
9 html += '<h3 class="term">' + entry['term']
10+ '</h3>';
11html += '<div class="part">' + entry['part']
+ '</div>';
12html += '<div class="definition">';
13html += entry['definition'];
14if (entry['quote']) {
15html += '<div class="quote">';
$.each(entry['quote'], function(lineIndex, line) {
16html += '<div class="quote-line">' + line
17+ '</div>';
18});
19if (entry['author']) {
20html += '<div class="quote-author">'
+ entry['author'] + '</div>';
21}
22html += '</div>';
23}
24html += '</div>';
+= '</div>';
25html
$('#dictionary').append(html);
26});
27});
28return false;
29});
});
30
31
32
Thng th chng ta khng c php truy xut JSON t m t server xa. Nhng bi v
file ny c to nn cung cp d li u ca n di dng JSONP, chng ta c th ly
d li u ny bng cch gn m t chui truy vn vo URL, s dng du ? lm ni lu gi
Chu : bit thm chi tit v cch s dng nhng la chon khc, xem thm phn
jQuery Reference Guide ho c xem phn API Reference ti
(http://docs.jquery.com/Ajax/jQuery.ajax).
Chinh sa tuy chon m c inh
K thu t u tin v cng l n gin nht m chng ta tho lu n trn l truy xut
m t on code HTML v chn n vo m t trang. Nhng cng c khi server cung cp
cho ta on HTML mnh cn nhng n li b bao quanh bi m t trang HTML khc m ta
khng mun. Khi m vi c yu cu server cung cp nh dng chng ta mun khng
thu n ti n, jQuery c th gip chng ta pha ngi dng.
Hy tng tng trng hp nh v d u tin, nhng trang cha cc t mc li l
m t trang HTML hon chnh nh sau:
1
2
3
4
5
6
7
8
9
10
11
12<body>
<div id="container">
13<div id="header">
14<h2>The Devil's Dictionary: H</h2>
15<div class="author">by Ambrose Bierce</div>
16</div>
<div id="dictionary">
17<div class="entry">
18<h3 class="term">HABEAS CORPUS</h3>
19<div class="part">n.</div>
20<div class="definition">
21A writ by which a man may be taken out of jail
when confined for the wrong crime.
22</div>
23</div>
24<div class="entry">
25<h3 class="term">HABIT</h3>
class="part">n.</div>
26<div
<div class="definition">
27A shackle for the free.
28</div>
29</div>
30</div>
</div>
31</body>
32</html>
33
34
35
Chng ta c th ti ton b ti li u vo trong trang bng cch s dng on m ta vit
trc y:
1$(document).ready(function() {
2$('#letter-h a').click(function() {
3$('#dictionary').load('h.html');
4return false;
5});
});
6
Bn thy trang web khng c bnh thng bi v n cha nhng on HTML chng ta
khng mun thm vo.
Tom tt