大家好,请教大家几个问题!谢谢!
1、用AJAX做的留言版,后台更新数据,前台马上看到效果,我目前用的是setInterval()方法过几秒就重新取得数据;此法性能有省耗;如果判断数据库里的留言表是否有更新,添加,删除操作,有再取一次数据,这样应该更好,有什么好的方法知道数据库表是否有更新添加或删除操作呢?2、在回复留言的时候,用的不是弹出窗口,直接在页面上回复,问题来了,因为用了setInterval,几秒重新取数据,结果管理员刚刚输入的内容没了;用的是textarea文本框回复,有没有办法判断如果用户在文本框输入内容的时候,不重新取数据。3、大家用ajax的时候,类似用Repeater列表数据显示的时候一般如何做呢,我是在后台直接用StringBulider循环出div,因为要是用Repeater想达到页面不刷新,添加删除倒是可以在客户端用JS写出来,不过分页也要不刷新的话再用JS写感觉很麻烦了,用StringBulider循环出来的很好用,操作后重新获取一下数据就可以了,不过修改起来很麻烦,请教下大家的建议或者还有其他更好的方法呢?4、很多时候我们都要用Request.QueryString["id"],这样来获取传过来的id,如果我在这个页面多次操作传过来的ID的话,是每次都Request.QueryString["id"]获取呢?还是用ViewState保存起来呢?声明个private static int id来保存呢或其他更好的方法呢,也请教下大家的意见。谢谢!

解决方案 »

  1.   

    1.每次取完留言返回一个最大流水号,下次取先比较流水号,如果有大于这个的,则取.
    2.可以局部刷新,或者回复的时候用cleaerInterval,不回复再开始,第二种方法较简单.
    3.用updatepanel可以解决这个问题.
    4. 还是这样取.
      

  2.   

    1跟数据库的交互不可避免 除非你在数据库更新的时候发送socket 不然就只有这样轮询了
    2回复框和留言文本框应该是分开的吧 只更新一个就好了
    3updatepanel
    4用viewstate
      

  3.   

    谢谢回复!
    回2点,我现在就是想知道:如何知道管理员是在回复的时候,判断某个textarea是否获取到焦点?
    回3,用微软的ajax 控件,基本都不用写了。
    回4具体呢?
      

  4.   

    你的描述我理解成两种.
    第一种,留言版回复后只有当前回复的人及时更新.这样可以通过JS来实现,容易
    第二种,留言版回复后,所以有打开留言版的人都及时更新.这样比较麻烦,而且非常不划算,这就类似一个多人在线群聊工具,实现方式有多种,有在客户端settimeout的,有建长连接的,看你的取舍
      

  5.   

    2.只要判断textrea中有文字,你就不刷新.
    4.Request.QueryString["id"] ,如果是在同一个请求中,可用个变量保存,这样效率高些,如果要post可用viewsate,但是post的时候这个id还是在的,直接用Request.QueryString["id"]可节省些viewstate的开销static会出问题的.
      

  6.   

    这个是回复后所有打开的人都更新的。问题是后台回复的时候,因为我在setInterval 过几秒重新调用一次数据,所以管理员还没回复完数据就没了,因为重新获取数据了。是否有方法能够判断当管理员在写回复的时候,如果可以判断,我就可以取消 setInterval 的调用!
      

  7.   

    定期更新方法是可行的,网页上一般也就这种方法了.因为只是个留言板,对实时性要求不是很高.迟个几秒看最新回复也没关系.因为你既然用了ajax,怎么会担心定期刷新也刷了管理员的回复,难道你不是局部更新而是全页面刷新?不可理解.对于后面的问题我建议用UpdatePanel,那样简单些.
      

  8.   

    12加状态判断
    3手写ajax分页是麻烦 可以用成型的框架 如ajaxpro
    4取URL很好 用ViewState也行 但不能用static保存 static是持久唯一的 会混乱