一个简单的利用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生成。最后响应给客户端。
分享到:
相关推荐
通过以上步骤,我们完成了一个基本的DWR Ajax应用,实现了页面局部更新的效果。这个简单的例子展示了DWR如何简化了JavaScript与Java之间的通信,使得在不刷新页面的情况下,用户可以实时获取服务器端的动态信息。 ...
下面是一个简单的例子: ```javascript $.ajax({ url: '/ajaxCall', type: 'POST', data: {param1: 'someValue'}, success: function(response) { // 在这里处理服务器返回的数据 console.log(response); }...
在"ajax的一个简单例子"中,我们通常会看到以下几个关键组成部分: 1. **创建XMLHttpRequest对象**:这是Ajax的核心,几乎所有的浏览器都内置了这个对象,用于与服务器进行异步通信。例如: ```javascript var ...
外部JavaScript文件`fun.js`中定义了`historyLotteryCode_1()`函数,该函数利用jQuery库发起一个AJAX请求。请求类型为POST,目标URL是`ajaxReturn.php`,并传递了一个名为`userid`的数据参数。 当服务器响应返回后...
这个“简单ajax登录例子”是一个非常适合初学者理解Ajax基本原理和使用方法的教程。在这里,我们将深入探讨Ajax如何与Servlet结合,实现用户无刷新登录验证。 1. **Ajax简介** Ajax的核心是JavaScript异步通信,它...
这可以通过监听第一个下拉框的change事件,然后发送Ajax请求获取新的选项数据,最后更新第二个下拉框。自动补全功能常用于输入框,当用户输入时,后台会返回匹配的建议列表。这通常结合keyup事件和$.ajax()实现,...
【标题】:“一个简单实现ajax的实例” Ajax(Asynchronous JavaScript and XML)是一种在无需刷新整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使得网页实现异步更新。这个...
**Ajax技术详解** Ajax,全称为"Asynchronous JavaScript and ...这只是一个基础的示例,实际的Web应用可能会涉及更复杂的交互逻辑、错误处理和性能优化,但这个简单的例子已经足以启发我们去探索更高级的Ajax应用。
"ajax实现天气动态刷新"这个主题就涉及到了如何利用Ajax技术,不刷新整个页面的情况下,动态更新城市天气信息。Ajax,全称Asynchronous JavaScript and XML(异步JavaScript和XML),是一种创建交互式网页应用的技术...
在本教程中,我们将学习如何利用ECharts结合Ajax技术,实现一个动态加载折线图的数据可视化。具体知识点包括: 1. ECharts的基本概念与使用方法 ECharts提供丰富的图表类型,例如折线图、柱状图、饼图等,每种图表...
这个“php+jquery+ajax最简单例子”旨在教你如何使用这些工具实现一个基本的异步数据交换功能。 首先,让我们深入了解这三个概念: 1. PHP(Hypertext Preprocessor):这是一种服务器端脚本语言,主要用于网页...
dwr实现Ajax小例子 例子中已包含dwr.jar DWR(Direct Web Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX开发变得很简单.利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScript就...
这个"ajax简单例子实现用户名检查"的项目,旨在教你如何利用Ajax和Servlet在JavaWeb环境中实现实时验证用户输入的用户名是否可用。下面我们将深入探讨这个主题。 首先,让我们了解Ajax的核心组成部分: 1. **...
本主题将深入探讨如何利用jQuery实现AJAX技术,通过给出的实际例子来增强理解。 AJAX(Asynchronous JavaScript and XML)是一种在无需刷新整个页面的情况下,能够更新部分网页的技术。jQuery提供了易于使用的API,...
在这个例子中,我们向'myajax/data.txt'发送了一个GET请求,假设该文件返回的是一个简单的JSON对象,如`{"message": "Hello, Ajax!"}`。收到响应后,我们将message字段的内容插入到ID为'result'的HTML元素中。 `...
本示例是关于如何使用AJAX实现一个简单的登录系统,无需数据库操作,非常适合初学者进行实践学习。 首先,我们需要理解AJAX的基本工作原理。AJAX的核心是XMLHttpRequest对象,它允许JavaScript在后台与服务器通信。...
Ajax全称为"Asynchronous JavaScript and XML",是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。DWR(Direct Web ...在实际项目中,利用DWR实现Ajax通信,可以创建出动态、交互性强的网页应用。
Ajax(异步JavaScript和XML)是一种在无需刷新整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据...通过结合`index.html`、`ajax.js`和`get.php`这三个文件,可以构建一个简单的Ajax应用。
下面是一个简单的Ajax进度条实现示例: 1. 创建HTML结构,包括一个用于显示进度的元素,例如一个`<div>`: ```html <div id="progressBar"></div> ``` 2. 在`script.txt`中编写JavaScript代码,使用`...
在本"AJAX聊天室例子简单易学"的主题中,我们将深入探讨如何使用AJAX来构建一个实时交互的在线聊天室,从而提高用户体验并减少服务器压力。 1. **AJAX基础**: - **异步通信**:AJAX的核心特性是异步性,它可以在...