利用前台的ajax不断向后台服务器请求,后台服务器不断查看数据库里的信息是否变化。若变化将信息返回前台,并执行一些操作
前台ajax代码
注意要加上cache这一项,如果是post请求的化,可以免了。不然的化会一直从缓存中找数据,不能及时更新。
function ink(){
var a=$("#randnumber").val();
$.ajax({
type:"get",
async:true,
cache:false,
url:"student.do",
data: {method:"reg3",randnumber:a},
success:function(msg){
try{
if(msg=="trues"){
window.location.href='success.jsp';
}
}catch(e){
alert('服务器繁忙!请稍后再试!');
}
}
}); }
$(function(){setInterval("ink()",1000);});
后台代码
@RequestMapping(params="method=reg3")
public @ResponseBody String reg3(int randnumber){
if(dimensionService.isexist(randnumber)){
return "trues";
}else{
return "falses";
}
}
后台是用spring MVC的
这里重点贴出一下dimensionService中caozuo
public Dimension getById( int id){
final int randnumber=id;
System.out.println("dimension dao ing");
Session session=hibernateTemplate.getSessionFactory().openSession();
session.setFlushMode(FlushMode.AUTO);
Query q=session.createQuery("from Dimension where randnumber=?");
q.setInteger(0,randnumber);
Dimension dimension = (Dimension)q.uniqueResult();
session.close();
return dimension;
}
这段代码是根据前台返回的randnumber进行返回数据库对应的dimension。
做的时候由于没有加session.close();这一句。出现了各种八阿哥,还好我及时参拜雍正。找出了。草,费煞人也。
短轮询来说太浪费了,请求的基本是无用的请求。大大损耗了性能。
这里最好是用长轮询来做,是推送模式。还在研究。