应用ajax处理级联的数据

在前文实现用户注册模块,主要是使用了responseText来处理服务器回传数据,而有时服务器需要回传XML类似复杂些的数据,这时我们就应该使用responseXML,来处理。看看如何做!
还是一样在Eclipse中试验!
我们选择一个网上书店,类似客户可以从前台点击查看图书信息的功能!而图书,包括章节,作者,出版社等信息!
setp1:我们先建立几个实体类,
Section.java书籍章节实体类
Chapter.java书籍章实体类
Book.java书籍实体类
BookService.java书籍服务类

这里我们采用JSP的方式来生成XML文档!getBook.jsp用于生成XML文档
<? xml version="1.0" encoding="GB2312" ?>

<% @ page contentType="application/xml; charset=GB2312" %>
<% @ page import="eflylab.ajax.xuanxiangka.*" %>
<% @ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"  %>
<% @ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>


<%
BookService service 
= new BookService();
Book[] bookes 
= service.getAllBook();
pageContext.setAttribute(
"bookes",bookes);
%>


< bookes >
< logic:iterate  name ="bookes"  id ="book" >
< book  title ="<bean:write name='book' property='title'/>"  author ="<bean:write name='book' property='author'/>"  publisher ="<bean:write name='book' property='publisher'/>" >
    
< logic:iterate  name ="book"  property ="chapteres"  id ="chapter" >
    
< chapter  id ="<bean:write name='chapter' property='id'/>"  name ="<bean:write name='chapter' property='name'/>" >
        
< logic:iterate  name ="chapter"  property ="sectiones"  id ="section" >
        
< section  id ="<bean:write name='section' property='id'/>" >< bean:write  name ="section"  property ="content" /></ section >
        
</ logic:iterate >
    
</ chapter >
    
</ logic:iterate >
</ book >
</ logic:iterate >
</ bookes >
getBook.jsp运行后得到的XML文档如下:
测试页面
<% @ page contentType="text/html; charset=gb2312" %>
< html >
< head >
< meta  http-equiv ="Content-Type"  content ="text/html; charset=gb2312" >
< title > Ch07--案例:处理级联的数据 </ title >
< link  href ="../../css/style.css"  rel ="stylesheet"  type ="text/css" >
< script  language ="javascript"  src ="../../ajax.js" ></ script >
< script  language ="javascript" >
function doViewChapter() {
    send_request(
"GET","getBookes.jsp",null,"XML",populateChapter);    
}

function populateChapter() {    
    
if (http_request.readyState == 4// 判断对象状态
        if (http_request.status == 200// 信息已经成功返回,开始处理信息
            //window.alert(http_request.responseText);
            var doc = http_request.responseXML;
            
var root = doc.getElementsByTagName("book")[0];
            
var book_info = document.getElementById("book_info");//book_info为下面的table
            book_info.firstChild.childNodes[0].childNodes[1].innerHTML = root.getAttribute("title");
            book_info.firstChild.childNodes[
1].childNodes[1].innerHTML = root.getAttribute("author");
            book_info.firstChild.childNodes[
2].childNodes[1].innerHTML = root.getAttribute("publisher");
            
var chapteres = root.getElementsByTagName("chapter");
            
var chapterStr = "";
            
if(chapteres) {
                
for(var i=0;i<chapteres.length;i++{
                    chapterStr 
+= chapteres[i].getAttribute("name")+"<br>";
                    
for(var j=0;j<chapteres[i].childNodes.length;j++{
                        chapterStr 
+= "&nbsp;" + chapteres[i].childNodes[j].firstChild.data + "<br>";
                    }

                }

            }

            book_info.firstChild.childNodes[
3].childNodes[1].innerHTML = chapterStr;
            document.getElementById(
"panel").innerHTML = document.getElementById("chapteres").innerHTML;
            document.getElementById(
"panel").style.display = "";
        }
 else //页面不正常
            alert("您所请求的页面有异常。");
        }

    }

}

</ script >
</ head >

< body >< center >
    
< p >< href ="javascript:void(0)"  onClick ="doViewChapter()" > 目录 </ a > &nbsp; 译者序 &nbsp; 作者序 &nbsp; 前言 &nbsp; 书皮 &nbsp; 书评
        
< hr  width ="200" >
    
</ p >
        
< span  id ="panel"  style ="display:" ></ span >
        
< span  id ="chapteres"  style ="display:none" >
    
< table  width ="400"  border ="0"  cellpadding ="4"  cellspacing ="1"  bgcolor ="#CCCCCC"  id ="book_info" >
        
< tr  bgcolor ="#FFFFFF" >
            
< td  width ="82" > 书名: </ td >
            
< td  width ="302" > &nbsp; </ td >
        
</ tr >
        
< tr  bgcolor ="#FFFFFF" >
            
< td > 作者: </ td >
            
< td > &nbsp; </ td >
        
</ tr >
        
< tr  bgcolor ="#FFFFFF" >
            
< td > 出版社: </ td >
            
< td > &nbsp; </ td >
        
</ tr >
        
< tr  bgcolor ="#FFFFFF" >
            
< td  valign ="top" > 章节 </ td >
            
< td > &nbsp; </ td >
        
</ tr >
    
</ table >
        
</ span >
</ center >
</ body >
</ html >
效果:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验目的: 1.了解ajax的基本原理和应用场景; 2.掌握使用ajax实现级联下拉菜单的方法; 3.加深对JavaScript和HTML的理解。 实验原理: AJAX(Asynchronous JavaScript and XML)即异步JavaScript和XML。它是一种创建快速动态网页的技术,它使用JavaScript和XML来实现异步数据交换。其优点在于能够在不重新加载整个网页的情况下,动态地更新部分网页内容,提高了用户体验。 级联下拉菜单是指一个下拉菜单的选择会影响到另一个下拉菜单的选项。比如,第一个下拉菜单是选择国家,第二个下拉菜单就会根据国家的选择而显示该国家的省份。这种下拉菜单的实现需要使用ajax技术。 实验过程: 1.设计HTML页面,包括两个下拉菜单和一个显示结果的div: ``` <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>级联下拉菜单</title> <script src="https://cdn.bootcss.com/jquery/2.1.4/jquery.min.js"></script> <script type="text/javascript"> $(document).ready(function(){ $("#country").change(function(){ var country = $("#country").val(); $.ajax({ type:"post", url:"province.php", data:{country:country}, dataType:"json", success:function(data){ $("#province").empty(); $.each(data,function(i,item){ var option = "<option value='" + item.province_id + "'>" + item.province_name + "</option>"; $("#province").append(option); }); }, error:function(jqXHR){ alert("发生错误:" + jqXHR.status); } }); }); }); </script> </head> <body> <div> <select id="country"> <option value="">请选择国家</option> <option value="CN">中国</option> <option value="US">美国</option> <option value="JP">日本</option> </select> <select id="province"> <option value="">请选择省份</option> </select> </div> <div id="result"></div> </body> </html> ``` 2.设计PHP文件province.php,用于接收ajax请求并返回对应的省份信息: ``` <?php header("Content-type:application/json;charset=utf-8"); $country = $_POST["country"]; if ($country == "CN") { $result = array( array("province_id"=>"1", "province_name"=>"北京"), array("province_id"=>"2", "province_name"=>"上海"), array("province_id"=>"3", "province_name"=>"广东") ); } elseif ($country == "US") { $result = array( array("province_id"=>"4", "province_name"=>"纽约"), array("province_id"=>"5", "province_name"=>"洛杉矶"), array("province_id"=>"6", "province_name"=>"芝加哥") ); } elseif ($country == "JP") { $result = array( array("province_id"=>"7", "province_name"=>"东京"), array("province_id"=>"8", "province_name"=>"大阪"), array("province_id"=>"9", "province_name"=>"京都") ); } echo json_encode($result); ?> ``` 3.在浏览器中打开HTML页面,选择国家后,会自动刷新省份下拉菜单,并在结果div中显示省份信息。 实验结论: 通过ajax技术,可以实现级联下拉菜单。在选择第一个下拉菜单的选项后,可以动态地更新第二个下拉菜单的选项,提高网页的交互性和用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值