【问题标题】:How i can store javascript array object saved somehow so that I can use it later [duplicate]我如何存储以某种方式保存的javascript数组对象,以便以后可以使用它[重复]
【发布时间】:2011-10-28 12:14:29
【问题描述】:

我的情况如下:

我有一个 id 选择页面,用户可以从页面上显示的 id 中选择 id。当用户选择 id 时,我将它们作为逗号分隔值存储在隐藏的输入字段中。

      <input type="hidden" values="234,678,987" />

我有一个按钮,点击它会弹出一个对话框,然后显示选定的 ID。这里显示的 id 是我从隐藏字段中获取的。 现在我需要存储产品 ID 和名称。所以在这种情况下我应该怎么做,因为现在我无法将这个数据结构保存在隐藏的输入字段中。即使我使用 javascript 数组,我如何保存该数组并在将来使用它来显示。是否可以将数组对象保存在隐藏的输入字段中......并稍后再次将其检索为数组对象......?

【问题讨论】:

  • 您要访问您网站上的不同页面吗?
  • 是的..我要去不同的页面。
  • 我不会使用cookie..
  • 那你打算用什么?会议?经过身份验证的用户?

标签: javascript


【解决方案1】:

这是JSFiddle

如果要将对象存储在输入字段中,可以使用JSON.stringify()

 //Pass your array (or JSON object) into JSON.stringify:
 JSON.stringify([{id:1, product_id: 2, name: 'stack'},
                 {id: 2, product_id: 2, name: 'overflow'}] )

这将产生:

 "[{"id":1,"product_id":2,"name":"stack"},{"id":2,"product_id":2,"name":"overflow"}]"

您可以将此值存储在隐藏字段(或数据属性)中:

 <input type="hidden" id="project" value="[{'id':1,'product_id':2,'name':'stack"',{'id':2,'product_id':2,'name':'overflow'}]" />

显然,您可以将这些步骤组合起来(或通过 PHP/Rails/...)

 $('#project').val(JSON.stringify([1,2,3]));

然后您可以使用例如 jQuery 对其进行解码:

 $.parseJSON($('#project').val());

这应该允许您使用您正在使用的进程,但将 Javascript 对象存储在您的输入字段中。希望这会有所帮助!

【讨论】:

  • 嗯,这看起来不错,但我可以直接对数组对象进行字符串化,或者遍历所有数组并创建类似上面的语法和字符串化...还有我必须在 jsp 页面中包含哪个库JSON.Stringify...
  • JSON.stringify 现在是 JavaScript 的一部分。您将能够在本地使用它。有很多用于解析 JSON 的 Javascript 库,jQuery 有一个,但还有很多其他的。此外,您可以对数组进行字符串化,JSON 会适当地处理这一点。看看这个JSFiddle 的例子。
  • 我如何创建这种格式 [{id:1, product_id: 2, name: 'stack'}, { id: 2, product_id: 2, name: 'overflow' }];跨度>
  • 来自 JSP?也许this 会有所帮助。只需查找“JSP JSON”,就有大量关于该主题的材料。
  • 不,我的意思是在 javascript 中,如果我有的话
【解决方案2】:

你可以

  1. 使用JS将值存储在内存中

    var arr = [];
    arr.push(your_value);
    
  2. 继续使用 JS 在 dom 中创建新的属性/值
  3. 通过查询字符串在页面之间传递值
  4. 将值存储在 cookie 中以便再次检索
  5. 将值存储在服务器上(在文件/db 中)以再次检索

注意:
选项 3 和 5 仅在您想转到另一个页面(在网站上)时才有意义。
如果您想关闭浏览器并在稍后检索该信息,则选项 4 和 5 很好。

【讨论】:

  • 我有兴趣将值存储在内存中..
  • 告诉我更多关于存储在内存中的信息..
  • 没有什么好说的了,当你创建一个 javascript 数组时,它存储在内存中。只有在函数中创建它,或者您转到不同的页面时,它才会被销毁。在这种情况下,您可能会考虑将数组发送到服务器进行处理。
  • 所以你告诉我创建某种全局 javascript 数组...
  • user882196,是的。如果您在查看页面时只需要该信息,那么是的,使用全局变量(示例编号 1)就是您所需要的。 .push() 在数组末尾添加一个值,.pop() 从数组末尾检索值(.shift().unshift() 从数组前面工作)。
【解决方案3】:

如果不担心IE7,可以使用localStorage

window.localStorage.setItem('myArray', JSON.stringify([234,678,987]));
// retrieve
var myArray = JSON.parse(window.localStorage.getItem('myArray'));

现代浏览器支持 JSON。您可以通过包含json2 来添加它。

【讨论】:

  • 不知道他在服务器上使用什么平台/框架(如果有的话)这将是最好的选择
【解决方案4】:

我假设您说的是在新页面加载后保留数据。您可以使用当前的方法将数据作为字符串存储在隐藏的输入中,然后将该字符串解析 到 JavaScript 对象中。另一种选择是您的服务器端代码可以生成一些内联 JavaScript 来声明您需要的 JavaScript 对象。例如,如果您使用的是 ASP.NET,您的页面可能会有这样的内容:

// Assuming "serverSideIds" is declared as a List<string>

<% var serializer = new JavaScriptSerializer(); %>
var ids = <%= serializer.Serialize(serverSideIds) %>;

【讨论】:

    猜你喜欢
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 2012-01-12
    • 1970-01-01
    相关资源
    最近更新 更多