`
dzq2008
  • 浏览: 91118 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

一个简单的利用Ajax实现的动态查询的例子

阅读更多

一个简单的利用Ajax进行动态查询的例子。

此例就是利用Ajax实现异步传输。通过异步传输对象发送请求和接受响应。请求的为服务器端组件,在这里使用Servlet实现。响应的结果为XML格式,通过在网页中利用JS使用DOM进行内容解析,实现内容的动态生成。

下面讲解例子:

首先准备表,在这里使用Oracle数据库,数据库名称为GoldDB,在其中的frank模式下建立表MyTable,表中包含三个字段分别为:pid,pname,age。以后的检索条件利用age,检索age大于某一条件的结果。

首先创建Web Project,在其中创建index.jsp,作为与用户交互的页面,动态的处理也在此页面利用Ajax完成。

主体页面的设计如下:

<body>
    age:<input type="text" id="searchAge"/><input type="button" onclick="searchPerson()" value="Search"/><br>
    <table id="mytable" border="16" width="80%">
     <tr bgcolor="#00ffff">
      <td>pid</td>
      <td>pname</td>
      <td>age</td>
     </tr>
     <tbody id="mybody">
     </tbody>
    </table>
  </body>
 

非常的简单,此页面存在一个文本框,id为searchAge,用来输入查询条件数值,另外存在一个按钮用作提交,调用JS方法searchPerson

页面中存在一个查询结果的现实Table,注意,必须建立tbody标记,因为动态生成的结果要在tbody中操作。id为mytable

当点击按钮的时候调用searchPerson方法,方法如下:

function searchPerson(){
   createXMLHttpRequest();
   var age=document.getElementById("searchAge").value;
   var queryString="testServlet?age="+age;
   xmlHttp.onreadystatechange=callback;
   xmlHttp.open("GET",queryString,true);
   xmlHttp.send(null);
  }
 

此方法首先利用createXMLHttpRequest方法创建异步传输对象,然后取得条件文本框中输入的年龄数值,然后生成请求URL

var queryString="testServlet?age="+age;
利用刚才的数值作为参数

然后利用回调

xmlHttp.onreadystatechange=callback;
当异步传输对象的状态发生任何改变的时候调用callback方法

最后代开查询:xmlHttp.open("GET",queryString,true);

最有发送:xmlHttp.send(null);,因为采用的是GET请求,所以不需要任何的参数信息,所以此处是null

因为需要创建异步传输对象,所以此方法如下:

var xmlHttp;
  function createXMLHttpRequest(){
       if(window.ActiveXObject){
          xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
       }else if(window.XMLHttpRequest){
          xmlHttp=new XMLHttpRequest();
       }
  }
 

就是根据浏览器的不同,采用不同的方式创建异步传输对象

回调的函数callback

function callback(){
   if(xmlHttp.readyState==4){
    if(xmlHttp.status==200){
         makeTable();
    }
   }
  }
 

当请求完成,且成功,则调用makeTable方法

makeTable方法非常的简单就是首先清理上次的查询结果,然后利用响应回来的XML数据进行DOM解析形成新的表格数据

function makeTable(){
   clearTable();
   var mybody=document.getElementById("mybody");
   var results=xmlHttp.responseXML.getElementsByTagName("person");
   for(i=0;i<results.length;i++){
    var row=document.createElement("tr");
    var cellPid=document.createElement("td");
    var cellPname=document.createElement("td");
    var cellAge=document.createElement("td");
    cellPid.appendChild(document.createTextNode(results[i].getElementsByTagName("pid")[0].firstChild.nodeValue));
    cellPname.appendChild(document.createTextNode(results[i].getElementsByTagName("pname")[0].firstChild.nodeValue));
    cellAge.appendChild(document.createTextNode(results[i].getElementsByTagName("age")[0].firstChild.nodeValue));
    row.appendChild(cellPid);
    row.appendChild(cellPname);
    row.appendChild(cellAge);
    mybody.appendChild(row);
   }
  
  }
  function clearTable(){
   var mybody=document.getElementById("mybody");
   while(mybody.childNodes.length>0){
    mybody.removeChild(mybody.childNodes[0]);
   }
  }

 整体页面代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'index.jsp' starting page</title>
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->
 <script type="text/javascript">
  var xmlHttp;
  function createXMLHttpRequest(){
       if(window.ActiveXObject){
          xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
       }else if(window.XMLHttpRequest){
          xmlHttp=new XMLHttpRequest();
       }
  }
  function searchPerson(){
   createXMLHttpRequest();
   var age=document.getElementById("searchAge").value;
   var queryString="testServlet?age="+age;
   xmlHttp.onreadystatechange=callback;
   xmlHttp.open("GET",queryString,true);
   xmlHttp.send(null);
  }
  function callback(){
  
   if(xmlHttp.readyState==4){
    if(xmlHttp.status==200){
     
     makeTable();
    }
   }
  }
  function makeTable(){
   clearTable();
   var mybody=document.getElementById("mybody");
   var results=xmlHttp.responseXML.getElementsByTagName("person");
   for(i=0;i<results.length;i++){
    var row=document.createElement("tr");
    var cellPid=document.createElement("td");
    var cellPname=document.createElement("td");
    var cellAge=document.createElement("td");
    cellPid.appendChild(document.createTextNode(results[i].getElementsByTagName("pid")[0].firstChild.nodeValue));
    cellPname.appendChild(document.createTextNode(results[i].getElementsByTagName("pname")[0].firstChild.nodeValue));
    cellAge.appendChild(document.createTextNode(results[i].getElementsByTagName("age")[0].firstChild.nodeValue));
    row.appendChild(cellPid);
    row.appendChild(cellPname);
    row.appendChild(cellAge);
    mybody.appendChild(row);
   }
  
  }
  function clearTable(){
   var mybody=document.getElementById("mybody");
   while(mybody.childNodes.length>0){
    mybody.removeChild(mybody.childNodes[0]);
   }
  }
 </script>
  </head>
 
  <body>
    age:<input type="text" id="searchAge"/><input type="button" onclick="searchPerson()" value="Search"/><br>
    <table id="mytable" border="16" width="80%">
     <tr bgcolor="#00ffff">
      <td>pid</td>
      <td>pname</td>
      <td>age</td>
     </tr>
     <tbody id="mybody">
     </tbody>
    </table>
  </body>
</html>

 请求的组件为servlet,代码如下(只列出doGet方法,其他的方法为默认的):

public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  response.setContentType("text/xml");
  
  response.setHeader("pragma", "no-cache");
  response.setHeader("cache-control", "No-cache");
  response.setDateHeader("expires", 0);
  Connection conn=null;
  PreparedStatement pstmt=null;
  ResultSet rst=null;
  String strAge=request.getParameter("age");
  try{
   Class.forName("oracle.jdbc.driver.OracleDriver");
   conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:GoldDB","root","123456");
   String strSQL="select * from MyTable where age>?";
   pstmt=conn.prepareStatement(strSQL);
   pstmt.setInt(1, Integer.parseInt(strAge));
   rst=pstmt.executeQuery();
   StringBuffer strb=new StringBuffer();
   strb.append("<persons>");
   while(rst.next()){
    strb.append("<person>");
    strb.append("<pid>"+rst.getInt(1)+"</pid>");
    strb.append("<pname>"+rst.getString(2)+"</pname>");
    strb.append("<age>"+rst.getInt(3)+"</age>");
    strb.append("</person>");
   }
   strb.append("</persons>");
   System.out.println(strb.toString());

   response.getWriter().write(strb.toString());
  }catch(ClassNotFoundException ex){
   ex.printStackTrace();
  }catch(SQLException ex){
   ex.printStackTrace();
  }
  
 }

 此方法就是利用JDBC检索对应的数据库表,然后检索数据,形成XML格式内容。注意利用StringBuffer生成。最后响应给客户端。

分享到:
评论
1 楼 就叫这个名字吧 2014-11-18  
  讲解的很好

相关推荐

    dwr.jar实现Ajax小例子

    dwr实现Ajax小例子 例子中已包含dwr.jar DWR(Direct Web Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX开发变得很简单.利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScript就...

    Ajax + servlet 实现上传进度条显示

    利用Ajax和Servlet实现文件上传,用来commons-fileupload和commons-io两个... 第一次上传这方面的东东希望大家顶顶呵呵^^ 另外有那位能给在下给个Struts2+ajax实现该功能的例子请邮到sky-bq@163.com里。不胜感激

    ajax实现输入提示(类似百度和Google的输入提示)

    ajax实现输入提示(类似百度和Google的输入提示) 用法非常简单: 1、在jsp页面引入autosuggest.js文件 2、建一个text文本框 3、写js代码: &lt;script&gt; new actb("tb", loadAllMessage("suggest" , ""), null); 4、这...

    Ajax实现简单的用户名验证

    简单的Ajax例子实现用户名验证程序,希望有所帮助。。。

    GIS利用ajax进行实时监测入门

    实现了利用ajax进行监测,并实现了基本功能.是新手入门GIS的好例子.代码全,简单配置就可运行,通过AJAX调用servlet

    AJAX基础概念、核心技术与典型案例(内涵动态实例)

    利用Ajax可以通过使用滑块的滑动来选择所显示的分页,这种拖拽的方式有很好的用户体验。 /test.html 滑动显示分页页面 /js JavaScript脚本文件 /img 系统使用的图片文件夹 第22章(/ch22) ...

    struts简单实现用户注册(最新修订)

    其二:利用ajax实现省市下拉列表的联动,结果是实现了,但是我的目的是想用responseXML,出现的问题是,只用responseText能获取返回的内容,而responseXML却获取不了 WebRoot目录下emp.sql是本程序用到的sql脚本 本...

    利用AJAX与数据岛实现无刷新绑定

    下面我们先来看一个简单的绑定例子: 第一步先确定XML数据源 &lt;xml ID=xmlData name=xmlData&gt;    &lt;AUTHOR&gt;John Smith  &lt;GENERATOR&gt;Visual Notepad  &lt;PAGETYPE&gt;Reference  &lt;ABS

    jquery.form.js实现将form提交转为ajax方式提交的方法

    原理:利用js进行对form进行组装成ajax的url和data,原理还是用ajax来提交,其实这完全可以自己写,但是有这个框架可能会更简单。 一、最简单例子: 第一步:引用js &lt;!--这里的min是自己用js压缩工具对完整版...

    JAVA上百实例源码以及开源项目

    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    Boa服务器下的ajax与cgi通信

    最近在最有做一个嵌入式课程设计,要求是利用基于cortax a8的物联网实验箱做一个简单的嵌入式网页交互系统作为课程设计来验收评分。因为本身自己是学前端的,所以网页部分并不是重点,主要是和boa服务器之间的通信,...

    JavaScript王者归来part.1 总数2

     6.5.1 动态创建函数--一个利用Function实现Lambda算子的例子   6.5.2 模式--函数工厂及其实例   6.6 总结   第7章 对象  7.1 什么是对象   7.2 对象的属性和方法   7.2.1 对象的内置属性   7.2.2 为...

    PHP Ajax JavaScript Json获取天气信息实现代码

    下面给出一个简单的小例子: 复制代码 代码如下:&lt;iframe width=”420″ scrolling=”no” height=”60″ frameborder=”0″ allowtransparency=”true” src=”http://i.tianqi.com/index.php?c=code&id=12&ico

    asp.net知识库

    一个XSLT的简单例子 XSLXSLT板主题整理 xsl入门的好文章 新手学习XSL的好东西 XSL语法介绍 XSL学习心得 - 调用属性值 XSLT与XML转换的详细介绍 功能应用 读写搜索 基础教程 RSS Web2.0时代,RSS你会用了吗?(技术...

    dwr入门+springmvc实现

    利用这个框架可以让AJAX开发变得很简单.利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScript就好像直接本地客户端调用一样(DWR根据Java类来动态生成JavaScrip代码).它的最新版本DWR0.6...

    JAVA上百实例源码以及开源项目源代码

    5个目标文件,演示Address EJB的实现 ,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    JQuery Ajax WebService传递参数的简单实例

    Asp.NET中利用jQuery实现Ajax时,在服务器端可以使用aspx,ashx,以及WebService等方式。最近研究了一下WebService方式,jQuery Ajax 方法调用 jQuery Ajax方法调用 Asp.Net WebService 的详细实例代码这篇帖子给出...

Global site tag (gtag.js) - Google Analytics