Ajax无刷新表格行内编辑源码带数据库

8 篇文章 0 订阅
8 篇文章 0 订阅
[b]Ajax 页面无刷新完整 表格编辑 姓名验证 增 删 改 查 源码带数据库[/b]

[color=red]附件中可下载源码加数据库,下载前看自己是否需要[/color]

实现内容:
1.姓名无刷新检查 数据库中是否有同名的帐户
2.增 删 改 查 页面无刷新 实现
3.表格编辑 无需提交新的页面处理数据
4.POST 提交中文已经处理

实现:Jsp ,js ,css, ajax,sqlserver 2005

效果图
1.页面显示数据
[img]http://lvp.iteye.com/upload/picture/pic/34661/f3eeaa66-37b2-3e60-8576-1c22795259fb.png[/img]

2.用户名自动检查
[img]http://lvp.iteye.com/upload/picture/pic/34659/6b7c947a-1bc0-32cd-ba1d-80274ab02713.png[/img]

3.已经存在的显示
[img]http://lvp.iteye.com/upload/picture/pic/34657/e82343fd-d4a4-3492-b315-9d7e1ca36f76.png[/img]

4.添加前
[img]http://lvp.iteye.com/upload/picture/pic/34655/6ab09c8f-a25f-3255-acc3-4231856fda5c.png[/img]

5.添加后的数据页面也不会刷新
[img]http://lvp.iteye.com/upload/picture/pic/34653/0d4ccf4c-e53b-3e77-9e68-fad55feb8a06.png[/img]

6.还可以实现行内编辑效果
[img]http://lvp.iteye.com/upload/picture/pic/34667/82eda443-8908-3e35-a5ec-c0648ee508ac.png[/img]

7.修改数据
[img]http://lvp.iteye.com/upload/picture/pic/34665/ec6c64c6-6021-3ce7-9eae-ab47a6fa585b.png[/img]

8.更新后的数据
[img]http://lvp.iteye.com/upload/picture/pic/34663/57a71376-7b01-3057-ab3e-61a67c8824fc.png[/img]

部分源码 index.jsp

<%@ page language="java" pageEncoding="GBK" contentType="text/html; charset=UTF-8"%>
<html>
<head>
<title>编辑数据</title>
<link rel="stylesheet" type="text/css" href="css/styles.css">
<style type="text/css">
#contentDiv{
width:700px;
margin-left:130px;
}
td{
line-height: 18px;
}
#addDiv{
width:700px;
margin-left:130px;
}
.nameTxt{
font-size:12px;
border:1px redge #227799;
width:95px;
height:15px;
background-color:#bbeedd;
}
.emailTxt{
font-size:12px;
border:1px redge #227799;
width:130px;
height:15px;
background-color:#bbeedd;
}
.addressTxt{
font-size:12px;
border:1px redge #227799;
width:200px;
height:15px;
background-color:#bbeedd;
}
</style>
<script type="text/javascript">
//异步请求对象
var xmlRequest;
//得到请求对象
function getXMLHttpRequestObject(){
//不同的浏览器创建方式不同
try{
xmlRequest = new XMLHttpRequest(); //Firefox ,safari
}catch(e){
//IE
try{
xmlRequest = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
xmlRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlRequest;//返回
}

//检查用户是否存在
function checkUser(userName){
//用户名输入不能为空
if(userName==""){
document.getElementById("mess").innerHTML="<font color='red'> 不能为空!</font>";
return;
}
//得到请求对象
xmlRequest = getXMLHttpRequestObject();
if(xmlRequest==null){
alert("您的浏览器不支持AJAX!");
return;
}
var url = "checkuser.jsp"; //请求页面
url+="?user="+userName; //用户名
url=encodeURI(url);
url=encodeURI(url);
xmlRequest.onreadystatechange = stateChanged;//状态改变调用函数
xmlRequest.open("GET",url,true);
//xmlRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
xmlRequest.send(null); // 发送请求
}

//姓名是否已经存在检查
function stateChanged(){
if(xmlRequest.readyState==4){
if(xmlRequest.status==200){
showMess();
}else { //页面不正常
window.alert("您所请求的页面有异常。");
}
}else{ //请求状态还没有成功,页面等待
document .getElementById ("mess").innerHTML ="检查中...";
}
}
//姓名检查 异步处理显示信息
function showMess(){
var message = xmlRequest.responseText;
document.getElementById("mess").innerHTML = message;
}
//显示表格编辑的数据
function changeView(id,name,email,address,birthday){
objname = document.getElementById('tdname'+id);
objemail = document.getElementById('tdemail'+id);
objaddress = document.getElementById('tdaddress'+id);
objbirthday = document.getElementById('tdbirthday'+id);
objmanage = document.getElementById('tdmanage'+id);
objname.innerHTML="<input type='text' name='name"+id+"' id='name"+id+"' class='nameTxt' value='"+name+"'>";
objemail.innerHTML="<input type='text' name='email"+id+"' id='email"+id+"' class='emailTxt' value='"+email+"'>";
objaddress.innerHTML="<input type='text' name='address"+id+"' id='address"+id+"' class='addressTxt' value='"+address+"'>";
objbirthday.innerHTML="<input type='text' name='birthday"+id+"' id='birthday"+id+"' class='nameTxt' value='"+birthday+"'>";
objmanage.innerHTML="<a href=javascript:getData('update','"+id+"')>OK</a>  <a href=javascript:getData('load','')>Cancel</a>";
}

//得到表格数据
function getData(flag,id){

var url = "getdata.jsp";//要请求的数据库返回的数据页面

//得到请求对象
xmlRequest = getXMLHttpRequestObject();
if(xmlRequest==null){
alert("您的浏览器不支持AJAX!");
return;
}

//load 表示是页面加载数据
if(flag=="load"){
url +="?flag=load";
//状态改变
xmlRequest.onreadystatechange = dataChanged;
xmlRequest.open("GET",url,true);
xmlRequest.send(null); // 发送请求

}else if(flag=="add"){ //add 表示是页面添加数据动作
//简单验证数据
var name = document.myform.newname.value;
var email = document.myform.newemail.value;
var address = document.myform.newaddress.value;
var birthday = document.myform.newbirthday.value;

//简单判断是否完整
if(name==""||email==""||address==""||birthday==""){
alert("信息不完整!");
document.myform.newname.focus();
return;
}
//拼接请求的字符串
var url = "getdata.jsp?flag=add";
url+="&name="+name+"&email="+email+"&address="+address+"&birthday="+birthday;
url=encodeURI(url);
url=encodeURI(url);
//状态改变
xmlRequest.onreadystatechange = dataChanged;
xmlRequest.open("POST",url,true);
xmlRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
xmlRequest.send(url); // 发送请求
}else if(flag=="update"){

//简单验证数据
var name = document.getElementById("name"+id).value;
var email = document.getElementById("email"+id).value;
var address = document.getElementById("address"+id).value;
var birthday = document.getElementById("birthday"+id).value;

//简单判断是否完整
if(name==""||email==""||address==""||birthday==""){
alert("信息不完整!");
document.getElementById(id+"name").focus();
return;
}

//拼接请求的字符串
var url = "getdata.jsp?flag=update";
url+="&name="+name+"&email="+email+"&address="+address+"&birthday="+birthday+"&id="+id;
url=encodeURI(url);
url=encodeURI(url);

//状态改变
xmlRequest.onreadystatechange = dataChanged;
xmlRequest.open("POST",url,true);
xmlRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
xmlRequest.send(url); // 发送请求
}else if(flag=="delete"){
url +="?flag=delete&id="+id;
//状态改变
xmlRequest.onreadystatechange = dataChanged;
xmlRequest.open("GET",url,true);
xmlRequest.send(null); // 发送请求
}
}

//状态改变 回调函数
function dataChanged(){
if(xmlRequest.readyState==4){
if(xmlRequest.status==200){
showDatas();//已经可以正常接受数据
}else { //页面不正常
window.alert("您所请求的页面有异常。");
}
}
}
//表格部分显示数据
function showDatas(){
//从响应页面得到数据
var message = xmlRequest.responseText;
//显示数据
document.getElementById("datadiv").innerHTML = message;

document.myform.newname.value="";
document.myform.newemail.value="";
document.myform.newaddress.value="";
document.myform.newbirthday.value="";
document.getElementById("mess").innerHTML="";
}
</script>
</head>
<body onload="getData('load','')">
<div id="mainDiv">
<div id="addDiv">
<h3>Information</h3>
<form name = "myform" method="post">
<table width="100%">
<tr>
<td>Name:</td>
<td><input type="text" name="newname" onclick="value=''" class="normalTxt" onblur="checkUser(this.value)">
<span id="mess"></span>
</td>
</tr>
<tr>
<td>Email:</td>
<td><input type="text" name="newemail" class="middleTxt" size="150"></td>
</tr>
<tr>
<td>Address:</td>
<td><input type="text" name="newaddress" class="longTxt"></td>
</tr>
<tr>
<td>BirthDay:</td>
<td><input type="text" name="newbirthday" class="normalTxt"></td>
</tr>
<tr>
<td colspan="2">
<input type="button" value="submit" onclick="getData('add','')" class="normalBtn"> 
<input type="reset" value="Reset" class="normalBtn">
</td>
</tr>
</table>
</form>
</div>
<div id="datadiv">

</div>
</div>
</body>
</html>



index.jsp 主页面实现思路

1. 在 body onload 事件中 调用函数

<body onload="getData('load','')">


getData()函数 主要是做异步向数据库发送请求动作,可以处理增 删 改 查操作
请求的页面都是 getdata.jsp
通过 判断用户到底执行的是哪一个动作 ,第二个参数是 id 用户执行 删除和修改标识动作

//load 表示是页面加载数据
if(flag=="load"){



//得到表格数据
function getData(flag,id){

var url = "getdata.jsp";//要请求的数据库返回的数据页面

//得到请求对象
xmlRequest = getXMLHttpRequestObject();
if(xmlRequest==null){
alert("您的浏览器不支持AJAX!");
return;
}

//load 表示是页面加载数据
if(flag=="load"){
url +="?flag=load";
//状态改变
xmlRequest.onreadystatechange = dataChanged;
xmlRequest.open("GET",url,true);
xmlRequest.send(null); // 发送请求

}else if(flag=="add"){ //add 表示是页面添加数据动作
//简单验证数据
var name = document.myform.newname.value;
var email = document.myform.newemail.value;
var address = document.myform.newaddress.value;
var birthday = document.myform.newbirthday.value;

//简单判断是否完整
if(name==""||email==""||address==""||birthday==""){
alert("信息不完整!");
document.myform.newname.focus();
return;
}
//拼接请求的字符串
var url = "getdata.jsp?flag=add";
url+="&name="+name+"&email="+email+"&address="+address+"&birthday="+birthday;
url=encodeURI(url);
url=encodeURI(url);
//状态改变
xmlRequest.onreadystatechange = dataChanged;
xmlRequest.open("POST",url,true);
xmlRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
xmlRequest.send(url); // 发送请求
}else if(flag=="update"){

//简单验证数据
var name = document.getElementById("name"+id).value;
var email = document.getElementById("email"+id).value;
var address = document.getElementById("address"+id).value;
var birthday = document.getElementById("birthday"+id).value;

//简单判断是否完整
if(name==""||email==""||address==""||birthday==""){
alert("信息不完整!");
document.getElementById(id+"name").focus();
return;
}

//拼接请求的字符串
var url = "getdata.jsp?flag=update";
url+="&name="+name+"&email="+email+"&address="+address+"&birthday="+birthday+"&id="+id;
url=encodeURI(url);
url=encodeURI(url);

//状态改变
xmlRequest.onreadystatechange = dataChanged;
xmlRequest.open("POST",url,true);
xmlRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
xmlRequest.send(url); // 发送请求
}else if(flag=="delete"){
url +="?flag=delete&id="+id;
//状态改变
xmlRequest.onreadystatechange = dataChanged;
xmlRequest.open("GET",url,true);
xmlRequest.send(null); // 发送请求
}
}



检查 用户姓名是否存在部分也非常的简单 ,请求的是 checkuser.jsp 页面

//检查用户是否存在
function checkUser(userName){
//用户名输入不能为空
if(userName==""){
document.getElementById("mess").innerHTML="<font color='red'> 不能为空!</font>";
return;
}
//得到请求对象
xmlRequest = getXMLHttpRequestObject();
if(xmlRequest==null){
alert("您的浏览器不支持AJAX!");
return;
}
var url = "checkuser.jsp"; //请求页面
url+="?user="+userName; //用户名
url=encodeURI(url);
url=encodeURI(url);
xmlRequest.onreadystatechange = stateChanged;//状态改变调用函数
xmlRequest.open("GET",url,true);
//xmlRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
xmlRequest.send(null); // 发送请求
}



中间有一部份代码,是用户当前页面编辑的传递参数,通过 innerHTML 输出标签内容

//显示表格编辑的数据
function changeView(id,name,email,address,birthday){
objname = document.getElementById('tdname'+id);
objemail = document.getElementById('tdemail'+id);
objaddress = document.getElementById('tdaddress'+id);
objbirthday = document.getElementById('tdbirthday'+id);
objmanage = document.getElementById('tdmanage'+id);
objname.innerHTML="<input type='text' name='name"+id+"' id='name"+id+"' class='nameTxt' value='"+name+"'>";
objemail.innerHTML="<input type='text' name='email"+id+"' id='email"+id+"' class='emailTxt' value='"+email+"'>";
objaddress.innerHTML="<input type='text' name='address"+id+"' id='address"+id+"' class='addressTxt' value='"+address+"'>";
objbirthday.innerHTML="<input type='text' name='birthday"+id+"' id='birthday"+id+"' class='nameTxt' value='"+birthday+"'>";
objmanage.innerHTML="<a href=javascript:getData('update','"+id+"')>OK</a>  <a href=javascript:getData('load','')>Cancel</a>";
}



checkuser.jsp 主要是用户检查用户是否存在

<%
//设置编码
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("user").trim();
name = URLDecoder.decode(name,"UTF-8");
Message message = new BOMessage().getMessageByName(name);

//设置输出信息的格式及字符集
response.setContentType("text/xml; charset=UTF-8");
response.setHeader("Cache-Control", "no-cache");
out.print("<response>");
if(message.getId()!=-1){
out.print("<font color='red'>用户名已经存在!请更改!</font>");
}else{
out.print("<font color='blue'>可以添加此用户!</font>");
}
out.print("</response>");
%>


中间一部分的表格编辑部分是前一个实例中专门实现了的,因此如果只是需要看表格编辑部分,可以查看 [url]http://lvp.iteye.com/blog/343241[/url]

且这个实例中的表格编辑部分有所改动,主要在于页面请求的表格数据不是当页显示,而是从异步请求 处理页面部分返回的,因此有一些差异,大家可以对比的去看.


getdata.jsp 表格部分处理代码 和 index.jsp中的代码有对应的部分

<%
for (int i = 0; i < list.size(); i++) {
Message message = list.get(i);
%>
<tr>
<td width="5%"><%=message.getId()%></td>
<td width="15%" id="tdname<%=message.getId()%>"><%=message.getName()%></td>
<td width="20%" id="tdemail<%=message.getId()%>"><%=message.getEmail()%></td>
<td width="30%" id="tdaddress<%=message.getId()%>"><%=message.getAddress()%></td>
<td width="15%" id="tdbirthday<%=message.getId()%>"><%=message.getBirthDay()%></td>
<td width="15%" id="tdmanage<%=message.getId()%>">
<a
href="javascript:changeView('<%=message.getId()%>','<%=message.getName()%>','<%=message.getEmail()%>','<%=message.getAddress()%>','<%=message.getBirthDay()%>')">Edit</a> 
<a href="javascript:getData('delete','<%=message.getId()%>')">Delete</a>
</td>
</tr>
<%
}
%>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值