在留言板,论坛或贴吧等用户交流系统中,回帖是最常用的操作之一.传统的回帖操作会将用户编写的内容提交到服务器,返回一个提示信息,然后页面自动跳转回发帖主题.这个周期往往要让用户等待几秒到十几秒的时间,同时还要看着浏览器刷新1~2次.使用ajax修改后的回帖功能能不刷新页面
测试环境:eclipse3.2+jdk1.5+mysql
(希望朋友看代码时,能结合上一篇文件中的图示效果来看,就很好理解了)
用户操作界面文件index.jsp
<script type="text/javascript" src="bbs.js"></script>
<link href="bbs.css" type="text/css" rel="stylesheet">
<h1>无刷新显示回帖</h1>
<div id="statusDiv" style="display:none"></div>
<div id="thread">
<%
String sql = "select * from bbs_post where threadid = 1 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 class="post" id="post<%=rs.getString("id")%>">
<div class="post_title"><%=rs.getString("title")%> [<%=rs.getString("username")%>]</div>
<div class="post_content"><pre><%=rs.getString("content")%></pre></div>
</div>
<%
}
} catch (SQLException e) {
System.out.println(e.toString());
} finally {
DBUtils.close(rs); //关闭结果集
DBUtils.close(pstmt); //关闭PreparedStatement
DBUtils.close(conn); //关闭连接
}
%>
</div>
<table class="reply">
<tr>
<td colspan="2" class="title">回帖<input type="hidden" name="threadid" id="threadid" value="1"></td>
</tr>
<tr>
<td>姓名:</td>
<td><input type="text" name="username" id="username"></td>
</tr>
<tr>
<td>标题:</td>
<td><input type="text" name="post_title" id="post_title"></td>
</tr>
<tr>
<td>内容:</td>
<td><textarea name="post_content" id="post_content"></textarea></td>
</tr>
<tr>
<td colspan="2"><input type="button" onclick="submitPost()" value="提交"></td>
</tr>
</table>
服务器端响应文件bbs_post.jsp
<%
out.clear(); //清空当前的输出内容(空格和换行符)
request.setCharacterEncoding("UTF-8"); //设置请求字符集为UTF-8
String title = request.getParameter("title"); //获取title
String content = request.getParameter("content"); //获取content
String userName = request.getParameter("username"); //获取username
String threadId = request.getParameter("threadid"); //获取threadid
String sql = "insert into bbs_post(title,content,username,threadid) values (?,?,?,?)"; //定义查询数据库的SQL语句
Connection conn = null; //声明Connection对象
PreparedStatement pstmt = null; //声明PreparedStatement对象
ResultSet rs = null; //声明ResultSet对象
try {
conn = DBUtils.getConnection(); //获取数据库连接
pstmt = conn.prepareStatement(sql); //根据sql创建PreparedStatement
pstmt.setString(1, title); //设置title
pstmt.setString(2, content); //设置content
pstmt.setString(3, userName); //设置userName
pstmt.setString(4, threadId); //设置threadId
pstmt.executeUpdate(); //执行insert操作
pstmt.close();
//获取刚插入数据的新id
pstmt = conn.prepareStatement("select last_insert_id()");
rs = pstmt.executeQuery();
if (rs.next()) {
out.print(rs.getString(1)); //输出新id
}
} catch (SQLException e) {
System.out.println(e.toString());
} finally {
DBUtils.close(rs); //关闭结果集
DBUtils.close(pstmt); //关闭PreparedStatement
DBUtils.close(conn); //关闭连接
}
%>
javascript文件bbs.js
var xmlHttp; //用于保存XMLHttpRequest对象的全局变量
var username; //用于保存姓名
var title; //用于保存标题
var content; //用于保存内容
var threadid; //用于保存主题编号
//用于创建XMLHttpRequest对象
function createXmlHttp() {
//根据window.XMLHttpRequest对象是否存在使用不同的创建方式
if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest(); //FireFox、Opera等浏览器支持的创建方式
} else {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");//IE浏览器支持的创建方式
}
}
//提交回帖到服务器
function submitPost() {
//获取帖子中姓名、标题、内容、主题编号四部分信息
username = document.getElementById("username").value;
title = document.getElementById("post_title").value;
content = document.getElementById("post_content").value;
threadid = document.getElementById("threadid").value;
if (checkForm()) {
displayStatus("正在提交……"); //显示提示信息
createXmlHttp(); //创建XMLHttpRequest对象
xmlHttp.onreadystatechange = submitPostCallBack; //设置回调函数
xmlHttp.open("POST", "bbs_post.jsp", true); //发送POST请求
//设置POST请求体类型
xmlHttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlHttp.send("username=" + encodeURI(username) +
"&title=" + encodeURI(title) +
"&content=" + encodeURI(content) +
"&threadid=" + threadid); //发送包含四个参数的请求体
}
}
//检查表单是否内容已填写完毕
function checkForm() {
if (username == "") {
alert("请填写姓名");
return false;
} else if (title == "") {
alert("请填写标题");
return false;
} else if (content == "") {
alert("请填写内容");
return false;
}
return true;
}
//获取查询选项的回调函数
function submitPostCallBack() {
if (xmlHttp.readyState == 4) {
createNewPost(xmlHttp.responseText);
hiddenStatus();
}
}
//创建新的回帖
function createNewPost(postId) {
//清空当前表单中各部分信息
document.getElementById("post_title").value = "";
document.getElementById("post_content").value = "";
document.getElementById("username").value = "";
var postDiv = createDiv("post", ""); //创建回帖的外层div
postDiv.id = "post" + postId; //给新div赋id值
var postTitleDiv = createDiv("post_title", title + " [" + username + "]"); //创建标题div
var postContentDiv = createDiv("post_content", "<pre>" + content + "</pre>"); //创建内容div
postDiv.appendChild(postTitleDiv); //在外层div追加标题
postDiv.appendChild(postContentDiv); //在外层div追加内容
document.getElementById("thread").appendChild(postDiv); //将外层div追加到主题div中
}
//根据className和text创建新的div
function createDiv(className, text) {
var newDiv = document.createElement("div");
newDiv.className = className;
newDiv.innerHTML = text;
return newDiv;
}
//显示提示信息div
function displayStatus(info) {
var statusDiv = document.getElementById("statusDiv");
statusDiv.innerHTML = info;
statusDiv.style.display = "";
}
//隐藏提示信息div
function hiddenStatus() {
var statusDiv = document.getElementById("statusDiv");
statusDiv.innerHTML = "";
statusDiv.style.display = "none";
}
样式表文件bbs.css
body, td, input, textarea {
font-family:Arial;
font-size:12px;
}
#thread {
border:1px solid black;
width:300px;
margin-bottom:10px;
}
#statusDiv {
border:1px solid #999;
background:#FFFFCC;
width:100px;
position:absolute;
top:50%;
left:50%;
margin:-50px 0 0 -100px;
width:280px;
}
div.post {
border-bottom:1px solid black;
padding:5px;
}
div.post_title {
border-bottom:1px dotted #0066CC;
font-weight:bold;
}
div.post_content {
font-size:12px;
margin:5px;
}
table.reply {
border-collapse:collapse;
width:300px;
}
table.reply td {
border:1px solid black;
padding:3px;
}
table.reply td.title {
background:#003366;
color:#FFFFFF;
}
input, textarea {
border:1px solid black;
}
textarea {
width:200px;
height:50px;
}
pre {
margin:0;
}
分享到:
相关推荐
在这个基于纯JavaScript和Ajax实现的无刷新网页表单验证示例中,我们将深入探讨相关技术与实践。 首先,JavaScript是客户端编程的主要语言,它在用户的浏览器上运行,可以实时检查用户输入,提供即时反馈,而无需...
这些实例覆盖了从简单的交互改进到复杂的功能增强,比如无刷新显示回帖、输入内容前的提示、带进度的文件上传、大量数据的动态浏览查询、信息排序以及标签页的切换等。 #### 二、无刷新显示回帖 **2.1 无刷新显示...
2.1无刷新显示回帖 2.2输入内容前提示 2.3带进度的文件上传 2.4大量数据动态浏览查询 2.5信息排序 2.6切换标签页 第三章 电子商务应用 3.1注册表单验证 3.2购物车 3.3产品快速检索 3.4系列...
2.1无刷新显示回帖 2.2输入内容前提示 2.3带进度的文件上传 2.4大量数据动态浏览查询 2.5信息排序 2.6切换标签页 第三章 电子商务应用 3.1注册表单验证 3.2购物车 3.3产品快速检索 3.4系列产品特性速查 ...
内容索引:脚本资源,HTML,无刷新提交,AJAX AJAX无刷新在线查词,输入中文或英文,直接响应翻译结果,不刷新页面,方便快捷,带有音标注释及例句(部分单词无),用了jQuery的Ajax相关函数实现,同时兼容IE6,7,8,FF,...
2-1.EXE 无刷新显示回帖实例演示 2-2.EXE 输入内容前提示实例演示 2-3.EXE 带进度的文件上传实例演示 2-4.EXE 大量数据动态浏览查询实例演示 2-5.EXE 信息排序实例演示 2-6.EXE 切换标签页实例演示 3-1.EXE 注册表单...
2.EXE 根据邮政编码获取地区信息实例演示 1-3.EXE 动态树形列表实例演示 1-4.EXE 多级联动菜单实例演示 1-5.EXE 条件设置向导实例演示 1-6.EXE 页面关键词提示实例演示 2-1.EXE 无刷新显示回帖实例...
<tr><td><a href="2.1/index.jsp">2.1无刷新显示回帖</a></td> <tr><td><a href="2.2/suggest.html">2.2输入内容前提示</a></td> <tr><td><a href="2.3/upload.html">2.3带进度的文件上传</a></td> <tr><td>...
动态加载数据动态加载的(FAQ 根据邮政编码获取地区信息、动态树形列表、多级联动菜单、 条件设置...改善客户体验(无刷新显示回帖、输入内容前提示、带进度的文件上传、大量数据动态浏览查询、信息排序、切换标签页)
进入论坛后选择【精品软件】,然后脚本将自动启动刷帖功能,随机在40到300秒范围自动打开设刷新并自动回帖,吾爱破解论坛自动刷帖脚本,目前刷帖范围为精品软件、逆向资源和原创作品,回帖内容以感谢楼主为主要内容...
列表页标题 标题+内容 多图显示 视频缩略图显示视频点击播放/列表页三种模式无刷新切换/列表页无刷新加载/支持主题分类筛选 回帖提醒/楼中楼/支持验证码/回帖表情/签名/相关主题/发帖支持标签/发帖支持投票悬赏等...
而`main_right`部分使用了Iframe来实现局部显示,这样可以将不同页面的内容嵌入到主页面的一个特定区域,使得页面更新时只刷新选定的部分,提高用户体验。 ```html ...
3. AJAX技术:为了实现无刷新的用户体验,插件可能使用AJAX异步通信,检查帖子的重复性。 4. JavaScript和CSS:用于增强用户界面的动态效果和视觉样式。 5. Discuz! API理解:熟悉Discuz!的API接口,能够调用论坛...
3. **无刷新回帖**:在论坛或社交媒体中,用户发表评论或回复时,无需刷新整个页面,新帖子能立即显示出来。Ajax在此过程中负责发送用户输入的数据到服务器,并将新产生的帖子信息返回,插入到相应位置。 4. **文件...
这个脚本在论坛或其他互动场景中可以用于创建有趣的动态效果,例如"回帖脱衣服的图片"可能是指随着用户交互(如回帖)图片会发生变化,比如显示新的图片层。然而,这种功能可能需要额外的逻辑来处理图片叠加或动画...
10、发帖和回帖后自动返回相应的帖子(原来并无返回,很不方便) 11、主题调用时增加了显示发帖者,非会员发帖将显示为“游客” v1.5更新: 1、修复了后台更改不了用户密码的BUG 2、修复了db1未定义变量的问题 ...
修改自琪琪贴吧程序 v3.3,增加了以下功能: 1、可以支持ACCESS或者MSSQL数据库,只...10、发帖和回帖后自动返回相应的帖子(原来并无返回,很不方便) 11、主题调用时增加了显示发帖者,非会员发帖将显示为“游客”
在PHP和Ajax结合的网站开发中,我们常常利用这两者的特性来实现动态、无刷新的交互体验。"PHP+Ajax网站开发典型实例"这个资源集合了多种常见的应用场景,旨在帮助开发者和学生理解并掌握这两种技术的协同工作。下面...
10、发帖和回帖后自动返回相应的帖子(原来并无返回,很不方便) 11、主题调用时增加了显示发帖者,非会员发帖将显示为“游客” v2.0更新: 1、贴吧列表显示相关贴吧简介 2、锁定贴吧后有相关的提示 3、限制了...
此外,PHP与前端通过AJAX技术交互,实现无刷新更新,提升用户体验。 4. **表单处理**:用户在论坛上进行发帖、回帖等操作时,会填写表单提交到服务器。PHP负责接收这些数据,进行验证(如防止SQL注入),然后存入...