从JSON重新填充复杂的javascript对象

时间:2009-10-08 20:15:20

标签: javascript json refresh

假设我有一个包含输入文本字段,“添加”按钮和“提交”按钮的Web表单。用户可以通过键入一些输入并单击“添加”来向div添加文本,这将动态地(使用javascript)将div添加到他们键入的内容中。同样在Add期间,我将文本存储在javascript对象中。添加一个或多个项目后,用户单击“提交”将javascript对象中的数据发送到要保存的服务器。数据被序列化为JSON字符串并发送到服务器。

我遇到的问题是,当添加条目时,刷新了。我希望当前添加的条目不仅会显示在页面上,还会显示在javascript对象中。

到目前为止,在每次添加之后,我使用AJAX将当前列表发送到服务器并将其保存为会话数据。将会话中的数据恢复到客户端javascript对象的最佳方法是什么?

我能想到的最好的事情是将JSON字符串嵌入到页面中,然后使用客户端javascript重新填充javascript对象。这将有效,但如果数据量变得非常大,我预计客户端javascript处理将会很慢。

(请注意,在我的实际情况中,我的javascript对象比这更复杂。它具有我已实现继承并具有原型“get”和“set”方法等功能,以动态构建一个有点复杂的换句话说,我不能只使用eval(JSON)覆盖我的对象。)

编辑:请注意,这不仅仅是Refresh发挥作用的地方。可以编辑以前提交的数据集,此时我需要重新填充客户端javascript对象的服务器端数据。

1 个答案:

答案 0 :(得分:1)

这是一个相当广泛的问题,因此问题可能没有一个独特的答案。那么我来评论吧。

  • 我的第一反应(如果我是项目的负责人)将是:“不要担心刷新按钮”。我认为没有人合理地期望刷新按钮可以保留任何状态。这就是为什么它被称为刷新。自从网络开始以来,它一直表现得如此,所以我认为没有必要对抗它。是的,今天可能不幸的是它仍然在这里并且表现得像它一样,而且我相信如果网络今天重新发明它就不会在这里。

  • 但如果你真的出于某种原因需要保持状态,我认为你在做什么是一个很好的解决方案。如果您正在处理现代浏览器(IE8 +,Firefox 2 +,Safari 3+等),我也建议您考虑 DOM storage 。它可能更优雅 - 不需要服务器会话。

  • 这是另一个(随机)评论。当用户点击刷新按钮时失败状态有多严重?如果您挂钩window.onunload事件并警告用户她可能会丢失某些数据,该怎么办?这还够吗?