Javascript 在脚本/注释/隐藏Div中存储附加数据

Javascript 在脚本/注释/隐藏Div中存储附加数据,javascript,html,browser,Javascript,Html,Browser,从老派开始,我只是问自己,我应该在哪里为我的JS代码嵌入额外的数据 评论标签 在旧时代2008年,我曾将数据存储在注释块中。我现在对此相当怀疑。我很不确定是否有一个或多个流行浏览器在页面加载时删除了注释标记。除了这种不安全感之外,这一直都很有效。尤其是不必担心标记等,除非->包含在数据中 隐藏分区 我在生产中使用的另一种常见技术是在一个隐藏的div中存储额外的信息。这种技术也非常有效,并且在前面使用div的隐藏类/样式不会在加载时引入可见的数据片段 脚本标记 通过阅读HTML5规范,我确信额外的

从老派开始,我只是问自己,我应该在哪里为我的JS代码嵌入额外的数据

评论标签 在旧时代2008年,我曾将数据存储在注释块中。我现在对此相当怀疑。我很不确定是否有一个或多个流行浏览器在页面加载时删除了注释标记。除了这种不安全感之外,这一直都很有效。尤其是不必担心标记等,除非->包含在数据中

隐藏分区 我在生产中使用的另一种常见技术是在一个隐藏的div中存储额外的信息。这种技术也非常有效,并且在前面使用div的隐藏类/样式不会在加载时引入可见的数据片段

脚本标记 通过阅读HTML5规范,我确信额外的数据应该存储在标签中。这还提供了使用src=文件加载大量数据的机会,并将数据直接嵌入javascript Base64编码字符串等。也可以选择纯文本格式,并将其直接写入脚本标记中

那么,考虑到所有这些选项,最常见的选项是什么?我可以对脚本标记中的任何数据格式使用src属性吗?服务器如何处理这些问题

谢谢你的阅读

更新: 我需要沿HTML页面存储数据。这是关于提供额外的数据来保存服务器/AJAX请求

一个很好的例子是有一个照片搜索网站,在那里可以找到10万张照片。每张照片都有一个ID。因为我们有一个小网站,所以我们只有10亿张照片。使用Base64编码,我们用5个字节6*5=30位存储每个id。现在,我们在HTML页面中发送10k*5=50KB的附加信息。因为我们使用的是压缩HTML,所以50KB可能值30KB左右,所以这不是什么大问题

我们现在可以从这些ID生成图片URI/URL链接。因此,当用户上下滚动结果列表时,只需要请求图片,而不需要额外的往返访问服务器,并且使用CDN交付图片


当然,我不需要这些图片,但想法很相似。

您可以尝试使用window.localStorage。。。例如:

//basic function function session(v1,v2){ if(typeof v2 == "undefined"){ return window.localStorage.getItem(v1); } else { window.localStorage.setItem(v1, v2); return 0; } } //example //save session("my.private.data", "someValue"); //show alert(session("my.private.data")); //use var myvar = session("my.private.data");
始终可以在隐藏的div上设置自定义属性。请参阅以下链接:


这是一个有点特定于.NET的答案,有点冗长和抽象,但希望你能理解。总的来说,我可以使用JavaScriptSerializer with aider将C中的对象序列化为JSON,或者使用一行代码将JSON反序列化为C对象,在输出缓存中存储大量数据

如果您进入.NET,您可以在此处找到它:

现在,它的美妙之处在于数据完全是JSON格式的,或者换句话说,它完全可以被JS使用。我通常只是简单地将它存储在全局变量中,比如数据或这些行中的某些东西,在我的例子中,它实际上很少是全局变量

这意味着,如果我在服务器端有一个复杂的数据结构,我可以简单地在客户端调用相同的结构,而不需要额外的工作。而且,当结构发生很多变化时,JSON数据结构也会随之更新,我只需要考虑如何处理新数据。或者基本上维护代码变得相当轻松。这也使得服务器端和客户端的通信更容易、更灵活,但您确实应该自己尝试一下,以理解我的意思


因此,基本上我的建议是使用某种序列化程序将JS中的数据存储在JSON格式的全局变量中,这使得服务器端和客户端编程更容易、更灵活,只需付出最小的努力

您还可以通过ajax请求检索额外的数据,例如json格式的数据。如果我理解您的查询正确,您需要一个单页应用程序解决方案。检查javascriptMVC/backbone.js/Angular.js等。据我所知,这将在设备本身上存储信息,使得在从一个页面转换到另一个页面时不请求这些信息成为可能。我需要的是在同一个HTML页面中嵌入数据,从而允许我应用分页/无限滚动,而无需为下一个信息请求其他信息来填充这些搜索结果“页面”。这对我来说是新的,谢谢!但我要寻找的是一种可以用来存储整个Json文档或XML的解决方案。我们对此发表了评论,但我不确定这是否可行。一个想法是使用隐藏的div作为替换。但是目标是以某种方式利用script标签。谢谢你的回答。最后生成包含在标记中的内联JavaScript。这是我需要的答案的一半。我目前正在寻找的是脚本标记需要处理的mime类型。在评论解决方案中,我可以存储我想要的一切。从javascript Eval到exec
例如,将其转换为在base64中加密的二进制数据。目前,我需要一种方法来存储1000多个ID的列表,以缓存完整的搜索结果。当用户向下滚动并请求更多信息时,我只请求有关某些条目的信息。最后,我只需要知道类似的内容是否足够,以及是否受所有浏览器支持。@MartinKersten Well,至少使用.NET序列化程序,您几乎可以序列化任何您想要的内容。至于mime类型,我总是简单地使用text/javascript,而没有真正考虑它,但是您也可以检查一下。在您的特定情况下,我将创建一个描述一个SQL返回行的对象,并将搜索结果存储在每1个SQL行1个obj的数组中,序列化该数组并将其放入输出缓存中。我可以给你举一个例子,但只能用C.@MartinKersten,我对此有所保留,因为script标签实际上不是用来存储文本的,而是用来存储脚本的。浏览器可以将其解释为错误的JS并抛出错误。另一方面,大多数JS开发人员都认为eval是邪恶的。@MartinKersten因此,文本/普通的东西引起了我足够的兴趣,我可以尝试一下。在所有浏览器IE6+、FF、Chrome、Mac Safari、iOS Safari中,它都按预期工作。我能够将实际的JS存储为文本而不触发它,并且能够毫无问题地检索它。因此,因为这实际上是有效的HTML,即使是较旧的浏览器也不会尝试使用它,我会说,如果你需要的话,就使用它吧,不过我还是建议序列化。