Ajax特效 动态加载的FAQ 之三

 

页面中显示了3个问题,分别编号为123。每个问题表现为一个超链接,单击超链接触发loadFAQ函数。每个问题下面包含一个用于显示答案的divid属性设置为“faqDetail+问题编号”,通过style="display:none"默认设置为隐藏。详细的函数说明请参考代码中的注释。

 

<%@ page contentType="text/plain; charset=UTF-8"%>

<%@ page language="java"%>

<%@ page import="java.sql.*,ajax.db.DBUtils"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<head>

<title>动态加载的FAQ</title>

<meta http-equiv="Content-type" content="text/html; charset=utf-8">

 

<script type="text/javascript">

var xmlHttp;       //用于保存XMLHttpRequest对象的全局变量

var currFaqId;   //用于保存当前想要获取的FAQ编号

 

//用于创建XMLHttpRequest对象

function createXmlHttp() {

    //根据window.XMLHttpRequest对象是否存在使用不同的创建方式

    if (window.XMLHttpRequest) {

       xmlHttp = new XMLHttpRequest();                                     //FireFoxOpera等浏览器支持的创建方式

    } else {

       xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");     //IE浏览器支持的创建方式

    }

}

 

//获取FAQ信息的调用函数

function loadFAQ(faqId) {

    currFaqId = faqId;                                                                        //记录当前想要获取的FAQ编号

    var currFaqDetail = getFaqDetailDiv(faqId);                           //获取对应的faqDetail节点

 

    if (currFaqDetail.style.display=="none") {

        currFaqDetail.style.display = "block"                               //设置div状态为“显示”

 

        //判断FAQ详细信息是否已存在,如果不存在则从服务器获取

        if (currFaqDetail.innerHTML == "") {

            createXmlHttp();                                                           //创建XmlHttpRequest对象

            xmlHttp.onreadystatechange = loadFAQCallback;

            xmlHttp.open("GET", "read_faq.jsp?faqId=" + faqId, true);

            xmlHttp.send(null);

        }

    } else {

        currFaqDetail.style.display = "none";                     //设置div状态为“隐藏”

    }

}

 

//获取FAQ信息的回调函数

function loadFAQCallback() {

if (xmlHttp.readyState == 4) {

    //FAQ信息写入到对应的div

        getFaqDetailDiv(currFaqId).innerHTML = xmlHttp.responseText;

    }

}

 

//根据faqId取得对应的div节点

function getFaqDetailDiv(faqId) {

    return document.getElementById("faqDetail" + faqId);

}

</script>

</head>

 

<body>

<h1>FAQ(常见问题)</h1>

 

<%

    String sql = "select id, faq from faq order by id asc";//定义查询数据库的SQL语句

    Connection conn = null;                                          //声明Connection对象

    PreparedStatement pstmt = null;                          //声明PreparedStatement对象

    ResultSet rs = null;                                                   //声明ResultSet对象

    try {

        conn = DBUtils.getConnection();                            //获取数据库连接

        pstmt = conn.prepareStatement(sql);          //根据sql创建PreparedStatement

        rs = pstmt.executeQuery();                              //执行查询,返回结果集

        while (rs.next()) {                                                        //遍历结果集

            %>

            <div>

                <a href="#" οnclick="loadFAQ(<%=rs.getInt(1)%>);return false;">

                    <%=rs.getString(2)%>

                </a>

            </div>

            <div id="faqDetail<%=rs.getInt(1)%>" style="display:none"></div>

            <%

        }

    } catch (SQLException e) {

        System.out.println(e.toString());

    } finally {

        DBUtils.close(rs);                                             //关闭结果集

        DBUtils.close(pstmt);                                      //关闭PreparedStatement

        DBUtils.close(conn);                                        //关闭连接

    }

%>

</body>

</html>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值