【问题标题】:JSON in location.hash for AJAX(J) bookmarking?用于 AJAX(J) 书签的 location.hash 中的 JSON?
【发布时间】:2010-02-19 16:20:32
【问题描述】:

我正在使用 jQuery 构建一个 AJAJ (AJAX with JSON) webapp,我希望我的用户能够为一个页面添加书签,以保存他们所有的为应用程序的特定部分设置选择。我有相当多的数据需要保存,所以我认为 JSON 可能是保存它的最佳方式,将其放入 location.hash

话虽如此,从location.hash 获取数据字符串并将其转换回 JSON 对象以便在 Javascript 中使用的最佳方法是什么?

这就是我对 JSON 对象的看法

http://example.com/index.html#json={'s': '2010-02-19', 'array':[1,2,3,4]}

Roland 建议我放弃json=,也成功删掉了 5 个字符。所以完整的位置是:

http://example.com/index.html#{'s': '2010-02-19', 'array':[1,2,3,4]}

【问题讨论】:

  • 我认为json={'s': '2010-02-19', 'array':[1,2,3,4]} 不会解析为 JSON。省略json=
  • 我原本打算做一个替换来删除json=,但没想到我可能不需要它。无论如何,从 2083 限制中保存一些字符!谢谢。 :)

标签: javascript jquery ajax json


【解决方案1】:

假设您具有 JSON 支持(本机或包含 JSON 解析脚本)的示例

var obj, text = document.location.hash;
if (text){
    obj = JSON.parse(text);
}

如果浏览器不支持原生 JSON,您可以从 http://www.json.org/js.html 获取脚本或使用一些框架支持的变体(如 YUI 的 http://developer.yahoo.com/yui/json/

【讨论】:

  • 我认为这是可行的方法,但不确定是否有更好的方法。我假设JSON.parse 可能只是在做eval 在幕后。
  • @S Pangborn:不,它是一个解析器。在json.org/js.html 了解更多信息
  • 很高兴知道。我宁愿使用比eval 更安全的东西。
【解决方案2】:

你说'相当多'。你可以说得更详细点吗?请记住,您的网址最多只能包含 2083 个字符。

就我个人而言,无论如何我都不愿意在命令行中存储这类东西。处理 URL 编码/解码会很痛苦,人们可以了解您的数据结构,并可能破解 URL 中的 JSON 字符串。

【讨论】:

  • 安全是一个问题 - 但实际上,数据存储在哪里并不重要。一旦它在浏览器中,客户端总是可以使用 firebug、greasemonkey 或其他任何东西来操作运行时。使用 JSON 作为 url 的一部分是 IMO 很自然的事情,当您使用它来处理简单的页面视图首选项时,例如页面的某些部分是否被隐藏/折叠等。
  • 是的,我了解 2083 个字符的限制,在某些浏览器上可能会更少。就安全性而言,我同意用户在 URL 字符串中破解 JSON,因为服务器端 Python 进行了足够的检查/清理。 JSON 将要做的就是为表单组件填写值。将数据存储在单独变量中的唯一问题是处理更复杂的数据结构,例如数组中的数组。我的另一个想法是使用 cookie,但它们不像书签那样持久。
【解决方案3】:

看看history plugin,它可能与您的需求有关

【讨论】:

  • 这可能对我正在做的一些导航很有用,但对于在 URL 中保存表单值则没有多大用处。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-04
相关资源
最近更新 更多