关于ajax的短轮询问题
利用前台的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();这一句。出现了各种八阿哥,还好我及时参拜雍正。找出了。草,费煞人也。
短轮询来说太浪费了,请求的基本是无用的请求。大大损耗了性能。
这里最好是用长轮询来做,是推送模式。还在研究。