• 应用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>
    效果:
  • 相关阅读:
    VSCode创建自定义代码段
    生命不息,折腾不止 ~ 旧PC改造之家庭影音
    万物互联之~网络编程基础篇
    PyCharm创建自定义代码段(JetBrains系列通用)
    VSCode设置Tab键为4个空格
    Jupyter-Notebook服务器自定义密码
    Jupyter ~ 像写文章般的 Coding (附:同一个ipynb文件,执行多语言代码)
    centos下使用nohup
    在centos中创建nginx启动脚本
    查看centos中的用户和用户组
  • 原文地址:https://www.cnblogs.com/eflylab/p/674806.html
Copyright © 2020-2023  润新知