微博、QQ空间等的动态加载方式属于滚屏加载技术,获取当前滚动条位置来触发onscroll()函数,向服务器发起请求,将请求得到的新的数据动态加载在页面上

本文利用该原理实现了动态加载,但不是检测当前滚动条位置来触发函数,而是由按钮事件触发,因此更简单一些。

走过的弯路

1) 将目前读取到的数据库中的位置存放在session中,当要加载更多的时候,去session中获得该值,动态加载后修改session中的值

错误原因:session是有缓存的,如果停留在当前页面,得到的值还是一开始的session值,就算在该页面进行了修改

2) 将服务器逻辑控制代码通过内嵌的方式放在网页页面中,即通过的方式嵌入

错误原因:这些代码在一开始加载网页的时候,便在服务器端一次执行过后加载在网页中,不会因为网页的后续事件而触发代码段的重新执行

思路

1) 在数据库中,为表项添加一个属性state,用于表示该项是否已经加载

2) 进入该页面时,先将所有的元素的state置0,表示所有的项目都还没加载;通过选中根据一定排序规则排序后的前n项,并将这n项的state置1,表示已经加载

3) 在后续的操作中,若用户想查看更多,选择“加载更多”,即触发加载事件,向服务器发送ajax请求,服务器取得还没加载的项目根据一定排序规则后的前n项,生成网页代码字符串并返回;最后将这n项的state置1

4)当数据库中所有的项目都已加载,则返回0,以供网页端判断处理

注意

1)

网页端通过append()函数动态加载网页元素,无法加载css等,会显示异常,要加上$('#id').trigger("create");才能加

载成功;另外,我的例子中是在jquery

mobile中实现的,为

  • 元素动态加载子元素,因此需要刷新

即$('ul').listview("refresh");

2) Mysql语言中,选择符合条件的记录m到n,不能直接写select * where condition limit m,n

该句的意思是从m开始的n项记录

以上方式利用数据库实现,在实际应用中,若考虑到多用户,则不用采用上述情况,可以考虑使用cookie来存储当前加载位置或者直接在js中利用变量存储当前位置

源码如下:"user_message.jsp"(用于显示留言页)

Document   : staff_info

Created on : 2013-7-22, 9:28:58

Author     : zengyi

--%>

乘客留言墙

#wrap {

white-space:normal;

word-wrap: break-word;

word-break: break-all;

overflow: hidden;

text-align: left;

}

ResultSet re = null;

Statement stmt = null;

Connection con = null;

String date, descript, time;

try {

Class.forName("com.mysql.jdbc.Driver").newInstance();

String connectionUrl = "jdbc:mysql://localhost/wb?" +

"user=root&password=526156";

con = DriverManager.getConnection(connectionUrl);

stmt = con.createStatement();

} catch (SQLException e) {

System.out.println("SQL Exception: "+ e.toString());

}

re = stmt.executeQuery("SELECT * FROM user_message_other order by id DESC limit 10");               //选择前十条未读的显示

%>

乘客留言

data-iconshadow="false" data-icon="arrow-l" data-iconpos="notext"

data-ajax="false">Back

if(re.next()){

if(re.previous()){};

while(re.next()){

descript = re.getString("descrip");

date = re.getString("date");

time = re.getString("time");

%>

%>

发布时间:

%>

}

}

%>

加载更多

var load_pos = 10;

function loadmore(){

var xmlhttp;

if (window.XMLHttpRequest){

xmlhttp=new XMLHttpRequest();

}

else{

xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

}

xmlhttp.onreadystatechange=function(){

if (xmlhttp.readyState==4 && xmlhttp.status==200){

if(xmlhttp.responseText==0){

alert("已加载完所有留言");

}

else{

load_pos += 10;

$('ul').append(xmlhttp.responseText);

$('ul').trigger("create");

$('ul').listview("refresh");

}

}

}

xmlhttp.open("GET","message_load.jsp?load_pos="+load_pos,false);

xmlhttp.send();

}

re.close();

stmt.close();

con.close();

%>

"message_load.jsp"用于服务器端加载信息及返回

Document   : update_message

Created on : 2013-5-13, 20:08:31

Author     : zengyi

--%>

ResultSet re = null;

Statement stmt = null;

Connection con = null;

String date, descript, time;

int load_pos_start = Integer.parseInt(request.getParameter("load_pos"));

String outstring = "";

try {

Class.forName("com.mysql.jdbc.Driver").newInstance();

String connectionUrl = "jdbc:mysql://localhost/wb?" +

"user=root&password=526156";

con = DriverManager.getConnection(connectionUrl);

stmt = con.createStatement();

re = stmt.executeQuery("SELECT * FROM user_message_other order

by id DESC limit "+load_pos_start+",10");       //从未读的消息中选择十条显示

if(re.next()){

if(re.previous()){};

while(re.next()){

descript = re.getString("descrip");

date = re.getString("date");

time = re.getString("time");

outstring += "

";

outstring += "

16px; color: white; width: 100%; height: auto;

\">"+descript+"

";

outstring += "
";

outstring += "

";

outstring += "

\">发布时间:"+date+time+"

<

/p>

";

}

out.print(outstring);

}

else{

out.print(0);

}

} catch (SQLException e) {

System.out.println("SQL Exception: "+ e.toString());

} catch (ClassNotFoundException cE) {

System.out.println("Class Not Found Exception: "+ cE.toString());

}

finally{

if (re !=null){

try{ re.close(); }catch(SQLException sqlEx){}

}

if (stmt !=null){

try{ stmt.close(); }catch(SQLException sqlEx){}

}

if (con !=null){

try{ con.close(); }catch(SQLException sqlEx){}

}

}

//-------------------------------------------------

%>

java做类似于qq空间动态加载_实现类似微博、QQ空间等的动态加载相关推荐

  1. 上拉加载_如何用Vue + Mint UI实现上拉加载更多

    引言: 上拉加载更多在移动端不论是在 app 里面还是在页面中都是必不可少的,以下是 mint-ui 中上拉加载更多的总结. 一.在项目中使用 mint-ui 需要先安装 查看官网 (1)安装:npm ...

  2. 如何将wiki个人空间共享给其他人_青年居室的共享空间设计

    "共享"俨然成为青年群体生活的常态化特征.但选择共享,势必要面临隐私保护.公共社交等问题.以居住为例,如何兼顾青年群体的共享需求和隐私需求成为设计师们的思考题.在共享潮流下,青年人 ...

  3. react 动态修改路由_升级到 React Router 4 并实现动态加载和模块热替换

    这篇文章是升级到Webpack2坑--模块热替换失效页面不自动刷新?的后续.那篇文章主要说明了,升级到 Webpack 2 之后,通过升级webpack-dev-server和react-hot-lo ...

  4. 点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)

    sina微博: <iframe width="120" height="24" frameborder="0" allowtransp ...

  5. win10可用空间变成未分配_系统C盘磁盘空间不够用的解决办法

    最近很多人咨询大叔,C盘用着用着就没了,100G的使用空间啊,怎么就省寥寥无几的三五G了,或者干脆右下角直接提示可用空间不足了呢 大叔今天就给大家简单教一下,在我们的系统C盘空间不足的情况下如何腾出有 ...

  6. malloc开辟的空间在哪一个区间_专业指南 | 室内设计和空间设计区别,到底该选哪一个?...

    很多想要留学的室内设计同学,在查看各大顶级院校官网信息时,会发现一个新的专业名词"空间设计(Spatial Design)",于是发出疑问: 室内设计不是Interior Desi ...

  7. 联想拯救者y7000p加内存条_笔记本怎么升级内存和硬盘 联想Y7000P加装内存和硬盘图文教程 (全文)...

    一般目前新买的笔记本电脑,大都是标配8GB内存和单块固态硬盘,内存和硬盘容量适中,但对于一些制图设计.偏大型游戏,又或者对硬盘存储要求比较高的用户来说,显然就不太够用,这时候我们一般会通过升级内存和硬 ...

  8. 动态壁纸安卓_抖音上超火的时间轮盘动态壁纸,安卓苹果都可以设置!个性好看...

    今天给大家分享一个最近很火的时间轮盘带姓氏的壁纸 效果呢就像我们现在看到的这样 看起来呢有点像古墓的感觉 同时我们常见的带姓氏的壁纸我也已经给大家准备好了 制作呢也非常的简单 我们只需要在微信的搜索页 ...

  9. java mysql点赞功能_用Java做一个类似于微博QQ空间点赞的功能-Fun言

    点赞是一个互动性很强的功能,网站加入点赞可以增强用户之间的亲密度,可以利用点赞排出受欢迎文章或者其他的列表,所以今天教大家如何做一个类似于微博.QQ空间的点赞功能 需求分析: 首先要明确这个功能是需要 ...

最新文章

  1. Overall Comparision With WCDMA
  2. nginx域名配置虚拟主机
  3. 电子设计基础——电源的各项指标及测量方法
  4. sql 存储过程中top 后面跟参数的问题
  5. npm run build 报错 versionRequirement: packageConfig.engines.node 'node' of undefined
  6. myeclipse怎么创建jframe类_创建型-建造者模式
  7. Redis基础(四)——持久化
  8. Win7从VHD中启动 如何扩充虚拟磁盘
  9. linux内核分析与应用 -- 并发(上)
  10. 评价微型计算机有哪些主要性能指标,计算机性能指标有哪些
  11. 海思SDK学习(5)海思媒体处理软件平台MMP(4)VO视频输出
  12. 工作方式需要主心骨、承载人
  13. Java读取UTF-8格式txt文件第一行出现乱码及解决;Java读带有BOM的UTF-8文件乱码原因及解决方法(转载)...
  14. 负载均衡之LoadBalancer
  15. C语言:浙大版《C语言程序设计(第3版)》题目集 习题5-6 使用函数输出水仙花数 (20 分)
  16. DataFountain
  17. python实现图片转字符画_Python实现图片转字符画的示例
  18. 企业服务器采用虚拟化技术的利弊
  19. Xamarin移动开发的优点和缺点
  20. mac上AnyProxy安装与使用

热门文章

  1. 获得百度智能云access token
  2. python标准化输出
  3. 配置阿里云docker加速与云镜像配置
  4. python预测数据怎么写_Python代写时间序列选择波动率预测指数收益算法分析案例...
  5. java 代码锁_Java 锁的知识总结及实例代码
  6. 剑桥offer(41~50)
  7. 关于MOSS列表库新建列表项前的!New标识
  8. extjs string类型转date_extjs 处理Object格式的Date对象
  9. php 小程序 活动弹幕,小程序:弹幕效果的消息提示
  10. java数据结构队列杨辉三角_数据结构之队列——输出杨辉三角形