利用前台的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();這一句。出現了各種八阿哥,還好我及時參拜雍正。找出了。草,費煞人也。
短輪詢來說太浪費了,請求的基本是無用的請求。大大損耗了性能。
這里最好是用長輪詢來做,是推送模式。還在研究。
