`
JAVA天地
  • 浏览: 674193 次
  • 性别: Icon_minigender_1
  • 来自: 太原
文章分类
社区版块
存档分类
最新评论

想知道CSDN的评论一提交上去就显示出来的AJAX是怎么实现的吗!!

阅读更多
在没有学AJAX之前,很多简单的AJAX效果在我看来都是非常的神秘,在写了这篇文章: Ajax的JSP示例以及相关知识介绍,适合于入门者 之后,很多的神秘感一下就消失,加上自己的程序经验,很多的东西,联想一下就可以做出其它你想要的效果,下面我举个类似于CSDN的评论效果的实例,其实就是在 Ajax的JSP示例以及相关知识介绍,适合于入门者 这篇文章的基础之加略略加工就可以了,如果你是刚刚进入这个门,我建意你还是先这篇文章 Ajax的JSP示例以及相关知识介绍,适合于入门者 然后再来看这个,因为那里面讲的最简单的AJAX实现,这个可能相对要复杂点。
OK,言归正传。这个实例的目的就是把数据库里面的用户全部显示出来,如果现在注册用户,在不刷新页面的情况下,把新增入的用户也全部显示出来。就和CSDN的评论一样:把原来的评论全部显示出来,并且把新评论在不刷新页面的情况下全部显示出来。
在这里面我会把与前面一个例子不同的地方用绿色的字体标识出来,这让看了我前面一篇文章的朋友,可以一下就知道这篇文章需要弄一些什么:
addUsers.jsp:处理用户的增加,并返回结果到提交页面
checkUser.jsp:确定用户名是事存在
register.jsp:用户注册首页
DBMS_Conn.java:处理数据库连接及用户检测、用户插入的Bean
addUsers.jsp:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@ page contentType="text/html;charset=GBK"%>
<%@ page import="project1.DBMS_Conn"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK"/>
<title>addUsers</title>
</head>
<body>
<%
String username=request.getParameter("username");
DBMS_Conn conn=new DBMS_Conn();
if(conn.addUser(username))
out.println(username);
%>
</body>
</html>
checkUser.jsp:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@ page contentType="text/html;charset=GBK"%>
<%@ page import="project1.DBMS_Conn"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK"/>
<title>checkUser</title>
</head>
<body>
<%
String username=request.getParameter("username");
DBMS_Conn conn=new DBMS_Conn();
if(conn.checkUser(username))
out.println("cz|用户名已经存在!");
else
out.println("bcz|用户名不存在,可以继续!");
%>
</body>
</html>
register.jsp:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@ page contentType="text/html;charset=GBK"%>
<%@ page import="project1.DBMS_Conn"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK"/>
<title>register</title>
<script language="javascript" type="text/javascript">
var httpRequest;
//下面这个函数可以返回一个适合任何浏览器的httpRequest,步子如下:
//1.试着创建一个XMLHttpRequest()示例,该示例可适合于除了微软以外的所有浏览器
//2.增加错误判断,如果当前浏览器是微软的,那么就创建适用于微软的浏览器
//3.但微软的浏览器又有两个版本之分,不过据说微软已经在7.0中增加对XMLHttpRequest()的支持
//4.但这样也需要对原来的浏览器支持,否则你写出来的程序那些用老版本浏览器的用户就是看不到效果的。
function createRequest()
{
var request;
try{
request=new XMLHttpRequest();
}catch(trymicrosoft)
{
try{
request=new ActiveXObject("Msxml2.XMLHTTP");
}catch(othermicrosoft)
{
try{
request=new ActiveXObject("Microsoft.XMLHTTP");
}
catch(failed)
{
request=false;
}
}
}
if(!request)
return null;
return request;
}
//这个函数就是用户的动作所有触发的函数,如下面的onblur()时,就会调用该函数
//经过的步骤如下:
//1.从HTML页面得到你需要的数据,可以采有document.getElementById("")方法。
//2.建立需要的URL,该URL就和在FORM里面的method为get时并采用submit提交在地址栏里面到的一样
//3.打开与服务器的连接,这里面有三个必要的参数,虽然文档规定只有两个,但是我个人觉得最好用三个,
// 第一个可以是GET,POST或者是POST,但常用的就是前面的两个,并且最好都用大写,因为有些浏览器如FireFox可能会报错,
// 第二个就是打报的URL,这肯定你是必须的。
// 第三个就是下面的看到的true,这里可以是false。true表示同步处理,你提交后可以做其它的事情,
// 这就是AJAX里面的A,即asynchronous;如是false,那就得等到服务器的返回才能够做其它的事情。
//4.等到服务器完成,并且确定返回执行了正确执行的提示,我们就可以做下面我们想做的事情。这些后面的事情就必须通过
// Javascript去完成了,因为XMLHttpRequest的唯一用途就是发送请求及接收服务器的响应结果。
//5.上面都完成了后,就可以采用send()方法向服务器发送你需要发送的信息了,它的参数可以是任何类型,发送的数据格式必须为
// 这样的格式:name=value&anothername=othervalue&so=on,如果你想传送数据,你必须更改MIME类型:
// httpRequest.setRequestHeader('Content-type','application/x-www-form-urnlencoded');
// 否则服务器将会丢弃发送的数据。
function getBackInfo()
{
var username=document.getElementById("username").value;
if(username=="")
return;
var url='checkUser.jsp?username='+username;
httpRequest=createRequest();
//onreadystatechange有5个值:
// 0:未初始化
// 1:初始化
// 2:发送数据
// 3:接收数据中
// 4:数据接收完毕
//另外还要注意就是在注册回调函数onreadystatechange时,后面的函数不能够带参数
//如下disResult是一个函数,不能够带参,但可以写成disResult
//下面相当于是一个隐性的循环,在函数中规定只有都接收完毕数据后才做处理
httpRequest.open("GET",url,"true");
httpRequest.onreadystatechange=disResult;//隐性的循环
httpRequest.send(null);
}
function disResult()
{
//1.一定要确定readystate==4的完成状态才做下面的事,否则会在建立连接即readystate==1的时候就开始,
// 然后会在readystate==2,readystate==3,readystate==4的时候都会执行,不信你可以alert("")一个
// 提示信息试试。
//2.服务器通知完成了,并且还要保证是正确完成的,得到的是我们需要的结果才能够继续,这里常用响应码有:
// 200:成功执行
// 401:未授权
// 403:禁止
// 404:没有找到文件
if(httpRequest.readystate==4)
{
if(httpRequest.status==200)
{
var response=httpRequest.responseText.split("|");
//这里只能够用indexOf方法,因为返还有一大堆HTML代码
//我被这个问题折磨了好几十分钟
if(response[0].indexOf("bcz")>0)
{
document.getElementById("addButton").disabled=false;
}
else if(response[0].indexOf("cz")>0)
{
document.getElementById("addButton").disabled=true;
}
document.getElementById("disCheckResult").innerHTML=response[1];
//alert('done');
}
else
{
alert('Something Wrong has Happend!');
}
}
}
function addUsers()
{
var username=document.getElementById("username").value;
if(username=="")
return;
var url='addUsers.jsp?username='+username;
httpRequest.open('GET',url,true);
httpRequest.onreadystatechange=addUser;
httpRequest.send(null);
}
function addUser()
{
if(httpRequest.readystate==4)
{
if(httpRequest.status==200)
{
//一切都OK了,那就该用Javascript去执行你想要的动作了。
document.getElementById("disAllUsers").innerHTML+="<br>"+httpRequest.responseText;
document.getElementById("username").value="";
document.getElementById("addButton").disabled=true;
document.getElementById("disCheckResult").innerHTML='这里用于显示检测用户是否存在的返结果';
//alert('done');
}
else
{
alert('Something Wrong has Happend!');
}
}
}

</script>
</head>
<body>
<form>
<table>
<tr>
<td>
<input type=text id="username" onblur="getBackInfo();">
</td>
<td>
<dd id="disCheckResult">这里用于显示检测用户是否存在的返结果</dd>
</td>
</tr>
<tr>
<td>
<input type=button id=addButton value="增加用户" onclick="addUsers();" disabled="true">
</td>
</tr>
<tr>
<%
DBMS_Conn con=new DBMS_Conn();
String allUsersByStr=con.allUsersByStr();
%>
<td>当前注册的用户如下:
<dd id="disAllUsers">
<%=allUsersByStr%>
</dd>
</td>
</tr>
</table>
</form>
</body>
</html>
DBMS_Conn.java:
package project1;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBMS_Conn {
Connection conn;
Statement st;
public DBMS_Conn() {
conn_init();
}
void conn_init() {
setConnection();
setStatement();
}
public void setConnection() {
try {
//Class.forName("org.gjt.mm.mysql.Driver").newInstance();
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String strurl =
"jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=E:\\db.mdb";
//conn =
//DriverManager.getConnection("jdbc:mysql://localhost/palfinger?user=root&password=admin&useUnicode=true&characterEncoding=8859_1");
conn = DriverManager.getConnection(strurl);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 设置Statement
*/
public void setStatement() {
try {
st =
conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 数据库连接初使化
*/
public boolean checkUser(String username) {
String sql="select * from user where username='"+username+"'";
ResultSet rs;
try {
rs = st.executeQuery(sql);
if(rs.next())
{
conn.close();
return true;
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
public boolean addUser(String username) {
String sql="insert into user(username) values(='"+username+"')";
try {
st.execute(sql);
conn.close();
return true;

} catch (SQLException e) {
try {
conn.close();
} catch (SQLException f) {
f.printStackTrace();
}
return false;
}

}
public String allUsersByStr() {
String sql="select username from user";
ResultSet rs;
StringBuffer str=new StringBuffer("");
try {
rs = st.executeQuery(sql);
while(rs.next()) {
str.append(rs.getString(1)+"<br>");
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
return String.valueOf(str);
}

}
分享到:
评论

相关推荐

    ajax 无刷新实现表单提交

    简单的ajaxt无刷新实现表单提交的实例(myeclipse 直接导入运行) 学习点: 1;ajax无刷新表单提交 2;ajax的运行历程 最简单明了的实例,清晰的帮你弄清上述概念,运行简单,只需解压该包,然后Myeclipse中file - ...

    C#实现CSDN评论助手V1.0

    通过下载后评论可以返回下载分,所以就评论,可以太蛋疼了,60秒才能评论一次。。。 就搞了个助手定时的评论,希望和我一样没有分的可以获得积分。 闲话太多,主要功能: 1.C#用webbrowser实现自动登录CSDN; 2.自动...

    ajax教程

    Ajax(Asynchronous JavaScript and XML)是一种在无需刷新整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使得网页实现异步更新,提高了用户体验,尤其是在数据交互频繁的Web...

    一分钟搞定ajax(pdf版)

    ajax经典教材,不管你是新手,还是老人,看看它吧!一分钟不是吹的

    Ajax 的考试系统的实现

    Ajax 是一种允许异步发送请求的技术,可以自 动交互与响应请求,用户不需要在提交页面后等待 或主动刷新页面, 从而减轻了服务器资源的耗费。 所以Ajax 技术特别适合于应用交互多、数据需要频 繁提交的网络在线考试...

    java实现ajax分页

    使用java,jsp,mysql实现Ajax分页。可以观察到ajax按需获取数据,异步交互的过程。这个代码可以直接引用到其他需要分页的地方。booklist.jsp是前台显示页面,getbooks.jsp是后台与数据库操作页面,creathttp.js是...

    CSDN Share:大会PPT合集下载,纯干货!

    CSDN Share 是一款出色的Android阅读工具,阅读由 CSDN社区用户分享的技术文档。 通过CSDN Share可以在线阅读或离线下载CSDN 举办的各类技术活动的精彩讲义,以及来自CSDN下载社区由用户分享的技术文档。 马上下载...

    ajax提交表单插件ajaxform.js

    这是一个ajax提交表单插件,支持文件上传,用起来非常方便。具体使用说明 http://blog.csdn.net/qq122453418/article/details/79511164 欢迎留言

    CSDN论坛 简洁版

    这个简洁版的CSDN论坛实现了一个高效、友好的阅读环境,体现了Ajax和jQuery在Web开发中的强大威力。文件“csdn.hta”可能是这个应用程序的主文件,hta是一种HTML应用程序,它可以像传统桌面程序一样运行,提供更加...

    基于AJAX方式实现的STM32H7_WebServer源码

    WEBserver实验(UCOSII版本)》改编,且包含了修改后的网页文件,原子哥的程序是将网页文件转换成了程序的一部分,该方式不方便网页的制作与调试,而且测试发现网页会每秒钟刷新一次,显示效果不好。为方便网页的更换...

    DropDownList控件实现省市联动(AJAX实现) .

    DropDownList控件实现省市联动(AJAX实现) . DropDownList控件实现省市联动(AJAX实现) . 程序描述http://blog.csdn.net/bdstjk/article/details/7516935

    AJAX完美示例极强

    - `DadaAJAX`:这可能是一个示例项目的文件夹,包含了使用AJAX技术实现的具体功能,如动态加载数据、异步表单提交等。开发者可以通过查看和运行这些代码来理解AJAX的实际应用。 - `AjaxPro实例说明(入门)转 - my...

    jquery投票插件可以显示进度类似csdn

    Ajax(Asynchronous JavaScript and XML)允许网页不刷新整个页面的情况下,与服务器进行数据交换,实现了局部刷新。在投票插件中,Ajax被用来在用户点击投票按钮后,向服务器发送投票请求,并在收到响应后更新投票...

    spring+mybatis+springmvc+ajax简单聊天室

    聊天室是用户交互的核心,而Ajax(Asynchronous JavaScript and XML)则是在不刷新整个网页的情况下,实现局部数据更新的关键技术,它可以提高用户体验,使得聊天消息能够即时显示。 在这个项目中,Spring框架作为...

    Android模拟登录评论CSDN

    登录成功后,我们就可以使用相同的网络请求方式,向CSDN的评论接口发送POST请求,附带上之前获取的token,提交用户的评论内容。评论接口的URL、请求参数以及解析的JSON格式可能与登录接口有所不同,具体细节需要查阅...

    Ajax工作原理

    Ajax工作原理 以及优点 缺点一些用途啊 关于什么Ajax的ppt文件

    CSDN app(完)

    【CSDN app】是一个基于Android平台的应用程序,主要用于浏览和互动CSDN(China Software Developer Network)上的博客和技术文章。这个应用集成了多种功能,包括但不限于阅读、搜索、评论和分享,旨在方便开发者们...

    JavaWeb中form、ajax提交数据Model转化工具类

    这是一个JavaWeb中form、ajax提交数据Model转化工具类,可以用来取代Spring的默认数据绑定、JFinal中的getModel方法。原理博客:http://blog.csdn.net/jflex/article/details/46883037

    AJAX控件实现相册效果(源码)

    AJAX控件实现相册效果(源码),是我实现把图片绝对路径放入数据库,页面用REPEATER控件显示图片后的有一新发现,对我来说,就像发现了新大陆一样,兴奋,我一个人享受,不过瘾,传到CSDN上,让追求图片效果的朋友,...

    Springboot+ajax+jpa实现异步删除修改添加用户

    实现了Ajax异步添加修改删除用户,整合了SpringSecurity,jpa等一堆框架...文章说明在https://blog.csdn.net/woshilishu/article/details/89351894

Global site tag (gtag.js) - Google Analytics