使用傳統(tǒng)AJAX技術(shù)的下拉框聯(lián)動(dòng)實(shí)現(xiàn)
??????在上一個(gè)項(xiàng)目中,需要實(shí)現(xiàn)下拉框聯(lián)動(dòng)的動(dòng)態(tài)實(shí)現(xiàn)時(shí),我使用的是在頁面中一次將所有聯(lián)動(dòng)數(shù)據(jù)裝載,然后再由js實(shí)現(xiàn)。具體如下:
js代碼:
?1
<
script?language
=
"
JavaScript
"
>
?2
var
?onecount;
?3
onecount
=
0
;
?4
subcat
=
new
?Array();
?5
?
<%
?6
?
int
?count
=
0
;
?7
?Iterator?itr?
=
?schoolList.iterator();
?8
while
(itr.hasNext())
?9
{
10
MaxSchoolView?msv?
=
(MaxSchoolView)?itr.next();
11
%>
12
subcat[
<%=
count
%>
]
=
new
?Array(
"
<%=msv.getSchoolName()%>
"
,
"
<%=Integer.parseInt(msv.getSchoolClass())%>
"
,
"
<%=Integer.parseInt(msv.getSchoolNO())%>
"
);
//
產(chǎn)生數(shù)組
13
<%
14
???????count
=
count
+
1
;
15
}
16
%>
17
onecount
=<%=
count
%>
;
18
?
19
function
?changelocation(id)
20
???
{
21
???document.maxSearchForm.smallsortselect.length
=
0
;
22
??????
23
???
var
?idto
=
id;
24
???
var
?i;
25
???document.maxSearchForm.smallsortselect.options[
0
]
=
new
?Option('請(qǐng)選擇學(xué)校','');
26
???
for
(i
=
0
;i
<
onecount;i
++
)
27
???????
{
28
???????????
if
(subcat[i][
1
]
==
idto)
29
???????????
{
30
???????????????document.maxSearchForm.smallsortselect.options[document.maxSearchForm.smallsortselect.length]
=
new
?Option(subcat[i][
0
],subcat[i][
2
]);
31
???????????}
???????
32
???????}
33
34
??
35
???????
36
???}
?????
37
???
38
</
script
>

?2

?3

?4

?5

?6

?7

?8

?9



10

11

12

13

14

15

16

17

18

19

20



21

22

23

24

25

26

27



28

29



30

31

32

33

34

35

36

37

38

??????頁面中的下拉框代碼:












這種實(shí)現(xiàn)方式過去比較普遍,不過有了AJAX以后,我們可以大量精減我們的頁面代碼,同時(shí)配合taglib,可以完全消除以上實(shí)現(xiàn)方式頁面中的java代碼。
如下:
<script?type="text/javascript">???????

function?getResult(stateVal)?
{
?var?url?=?"select?type=login®ionNO="+stateVal;?

?if?(window.XMLHttpRequest)?
{?
?req?=?new?XMLHttpRequest();?

?}else?if?(window.ActiveXObject)?
{?
?req?=?new?ActiveXObject("Microsoft.XMLHTTP");?
?}?

?if(req)
{?
?req.open("GET",url,?true);?
?req.onreadystatechange?=?complete;?
?req.send(null);?
?}?
}?

function?complete()
{

?if?(req.readyState?==?4)?
{?

?if?(req.status?==?200)?
{?
????????????var?xmlDoc=req.responseXML.documentElement;
????????????var?xSel=xmlDoc.getElementsByTagName('select');
????????????var?select_root=document.getElementById('schoolNO');
????????????select_root.options.length=0;
????????????var?option=new?Option('--請(qǐng)選擇用戶--','0');
????????????select_root.add(option);
????????????for(var?i=0;i<xSel.length;i++)

????????????
{
????????????????var?xValue=xSel[i].childNodes[0].firstChild.nodeValue;
????????????????var?xText=xSel[i].childNodes[1].firstChild.nodeValue;
????????????????var?option=new?Option(xText,xValue);

????????????????try
{
????????????????????select_root.add(option);

????????????????}catch(e)
{
????????????????}
????????????}
????????????}
????????????}
}
</script>
























































下拉框代碼:




















這里結(jié)合了自定義taglib,可以對(duì)比前后兩種下拉框聯(lián)動(dòng)的實(shí)現(xiàn)方式,可以發(fā)現(xiàn)第二種消滅了原來jsp中的java代碼,實(shí)現(xiàn)了我一直所追求的頁面和代碼解耦。
?????????那么,這個(gè)AJAX的使用,究竟是怎么一回事呢?其實(shí)道理非常簡(jiǎn)單,不用說太多原理,通過代碼就可以體會(huì)。上面貼出來的js代碼,就是一個(gè)傳統(tǒng)的AJAX使用方式,通過建立與服務(wù)器的異步XML通信,取得數(shù)據(jù)后,對(duì)頁面中的下拉框進(jìn)行渲染。與這段代碼通信的是一個(gè)servlet,代碼如下:



















































































在這個(gè)servlet中,將得到的數(shù)據(jù)list,組裝成xml,返回給頁面,以此來實(shí)現(xiàn)動(dòng)態(tài)刷新下拉框的效果。