如何保存对象以供以后使用?通过 JSON 或其他方式发送并存储在数据库中然后恢复
Posted
技术标签:
【中文标题】如何保存对象以供以后使用?通过 JSON 或其他方式发送并存储在数据库中然后恢复【英文标题】:How do I save an object for use later? Send via JSON or othewise and store in DB then recover 【发布时间】:2011-10-17 14:50:00 【问题描述】:我很想知道如何保存event.target
以供以后使用。我意识到.data()
可以使用,但这不会在会话中或为不同的用户保存它。
我发现如果我执行这样的操作,我可以获得有关被点击的元素(类、id、父母等)的大量信息......
jQuery('body').click( function(event)
jQuery('body').children().wrapAll('<div class="wp_super_heatmap"></div');
x_coord = event.pageX - jQuery( event.target ).offset().left;
y_coord = event.pageY - jQuery( event.target ).offset().top;
nodeName = event.target.nodeName;
nodeClass = event.target.className;
currentId = jQuery(event.target).attr('id');
nodeParents = jQuery(event.target).parents()
.map(function ()
return this.tagName;
).get().join(", ");
但是,我真正想做的事情是......
node = jQuery( event.target );
node_json = JSON.stringify( node );
然后将它与我的 AJAX 帖子一起发送出去。
基本上,有人知道保存 javascript 或 jQuery 对象以供以后使用的方法吗?
编辑:仅供参考,稍后我通过在这样的页面上放置一个点来重新创建点击... jQuery.each(data.dot_collection, function() x_coord = this.x_coord; y_coord = this.y_coord; jQuery('').css('top': y_coord + "px", 'left': x_coord + "px").appendTo('body'); );
【问题讨论】:
您不能(轻松地)序列化 DOM 元素,因为它们包含循环引用。首先,您必须确定您需要哪些数据。那么它到底是什么? 嗯,就是这样。我想准确保存用户点击网页的位置。由于项目可以在页面上浮动或居中或任何我希望能够保存点击的相对坐标和有关该点击的足够信息以便稍后在此处放置一个“点”。我的问题是类、类型、id 等并没有真正提供有关单击元素的足够信息。 【参考方案1】:正如 Ryan 所说,DOM 节点不容易序列化。对于更复杂的应用程序,您应该依赖更好的模式并将模型层添加到您的应用程序中。只需在 javascript 的对象树中跟踪用户输入并添加相应地设置这些值的事件处理程序。
这些对象可以在卸载时序列化和在加载时反序列化。一个不错的好处是您的应用会看起来更干净,并且更易于维护。
我的意思是类似this,但请注意,此类功能很容易自行实现。
如果您愿意,您甚至可以将本地存储与(非平凡的)脚本一起使用,例如 jStorage。
更新
我知道这听起来需要做很多工作,但相信我,像这样的决定总能带来回报!
【讨论】:
我明白了。我从中得到的是,创建一个具有节点树(如 -> html -> body -> 等)的模型,然后添加在引用的模型中添加“点”的事件处理程序是一个好主意树中的那些对象之一。你是这个意思吗? 我不介意这份工作。它让我忙于我的 webdev 爱好 =)。 我的意思不是大,我是小意思;)。花一些时间来决定它应该有什么结构。大多数时候,一棵树甚至都不是必需的。我当然不会复制整个 DOM,只是将一些数据添加到 Hash 并使用 sync this。 我不确定在没有整个 DOM 树的情况下如何识别单击了哪个元素。您在“只需将一些数据添加到哈希并使用同步”上迷失了我。如果那是一种实际保存数据的方法,那我很高兴。这一切都在 WordPress 上运行,因此我可以轻松访问数据库。 我只需要一个对象来布置 DOM 的结构。单独的“点”对象将引用 DOM 中的哪个元素。显然,如果您更改了 DOM,旧的“点”将不再有效。以上是关于如何保存对象以供以后使用?通过 JSON 或其他方式发送并存储在数据库中然后恢复的主要内容,如果未能解决你的问题,请参考以下文章