我基于Ajax和后端数据库做了一个类似Windows资源管理器的Web文件管理,现在有一个问题是,页面一加载会显示用户根,当我点击目录打开多层目录后,再刷新,此时由于页面重新加载,无法停留在当前目录(由于Ajax重新加载),而是回到页面第一次加载的根目录,请问如何能让Ajax刷新后仍停留在当前目录?

2011-01-12 00:42:52

6 Answers

是刷新整个页面吗?如果刷新整个页面,ajax肯定重新加载!你看能不能这样呢,你在点击目录的时候肯定要读取后端数据库吧,弄个全局变量来记录一下,这样整个页面再刷新的时候就能记住当前的节点了!

2011-01-12 03:10:57

记录cookie, 例如 "5,59,188" 页面加载获取cookie 如果有值 依次模拟点击目录 5 ,59 58,或者在php端获取cooke,直接处理数据。

如果离开页面不想记住上次的操作,那么每次点击目录需要在地址后加 #hash

如 #5 再点击 59 变为 #5_59 ,当前页面刷新后,地址栏中还是带有#5_59,那么js获取,依次模拟点击目录 5 ,59

2011-01-12 04:05:24

保存在浏览器端的方法

  1. Cookie:每一次更新路径,都用 document.cookie 重新记录一次最新路径到 Cookie。
  2. Hash:也就是 URL 后面的 # 号的内容,每一次更新路径,改变当前页面的 hash 值,刷新后,URL 中的 hash 会被保存的,用 location.hash 读取即可。人人网在查看照片的时候就采用了该方法。
  3. HTML 5 History:这个 URL 是会变的,局限就是需要浏览器支持 HTML 5。花瓣网就采用了该方法。

保存在服务端的方法,也就是 Session,这样有一个额外的好处,就是用户即使不小心关掉浏览器或者当前 Tab,再访问该网页,还是可以恢复到上次路径的。坏处是增加了服务器的负担。

最后加一句,我个人最喜欢浏览器端的第二种方法。

2011-01-12 05:44:31

其实按网络游戏的思路来就行了,无论你是正常下线还是意外断线,总会记录你最后的位置。
如果服务器出现异常,需要回滚数据,那么必须要查以前的操作历史

在服务端记录三个值
1,last_position 最后的位置,用来定位
2,footmark 足迹,也就是history,用来后退
3,dirtylog ,脏记录,用来撤销

提供一个开关,默认选择
1,是否默认打开最后访问的页面

2011-01-12 07:00:35

刷新的时候新建一个元素来承载这个目录的子目录,保留原来打开的目录不变

2011-01-12 08:57:39

这样,你左侧显示的是根也好,子目录也要,都在数据库里有个id与它对应吧。用户展开一个目录,就将该目录的id加入到一个隐藏的Input里,如果用户选择收缩一个已经展开的目录,就把它对应的隐藏id 删除, ajax刷新的时候,读取所有的隐藏的input,所有的id对应的目录全部展开,并递归展开其上级目录。这样应该是可以和刷新之前一致的。
补充:这种情况是针对比如根目录下两个子目录,用户都展开了,你要刷新的时候完全一样,就得记录所有展开的目录。
如果只想保留当前正在浏览的目录,只需要一个input就够了,然后递归展开这个目录的父目录

2011-01-12 10:45:57
您不能回答该问题或者回答已经关闭!

相关文章推荐

  • C#开发中的反射机制

    反射的定义:审查元数据并收集关于它的类型信息的能力。元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等

  • C#实例解析适配器设计模式

    将一个类的接口变成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够一起工作

  • C#中using指令的几种用法

    using + 命名空间名字,这样可以在程序中直接用命令空间中的类型,而不必指定类型的详细命名空间,类似于Java的import,这个功能也是最常用的,几乎每个cs的程序都会用到

  • C#协变和逆变

    “协变”是指能够使用与原始指定的派生类型相比,派生程度更大的类型,“逆变”则是指能够使用派生程度更小的类型

  • C#运行时相互关系

    C#运行时相互关系,包括运行时类型、对象、线程栈和托管堆之间的相互关系,静态方法、实例方法和虚方法的区别等等

  • 使用托管C++粘合C#和C++代码(二)

    本文实现一下C++代码调用C#代码的过程。我构造一个简单并且直观的例子:通过C++ UI 触发C# UI.

  • C#开发高性能Log Help类设计开发

    项目中要在操作数据库的异常处理中加入写Log日志,对于商业上有要求,写log时对其它操作尽可能影响小,不能因为加入log导致耗时太多

  • C#中的索引器的简单理解和用法

    C#中的类成员可以是任意类型,包括数组和集合。当一个类包含了数组和集合成员时,索引器将大大简化对数组或集合成员的存取操作

  • Async和Await使异步编程更简单

    C#5.0中async和await两个关键字,这两个关键字简化了异步编程,之所以简化了,还是因为编译器给我们做了更多的工作

  • 使用托管C++粘合C#和C++代码(一)

    C#在xml读写,数据库操纵,界面构造等很多方面性能卓越;C++的效率高,是底层开发的必备武器

  • C#基础概念之延迟加载

    延迟加载(lazy load)是Hibernate3关联关系对象默认的加载方式,延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作

  • 深入C# 序列化(Serialize)、反序列化(Deserialize)

    C#中的序列化和反序列化,序列化是.NET运行时环境用来支持用户定义类型的流化的机制