ajax - 在 URL Hash/Fragment 中存储 JSON 的最佳实践

标签 ajax json ria state-management

我正在构建一个单页 AJAX 应用程序,并希望在某些情况下在 URL 哈希 (#) 之后以 JSON 存储状态。我已经看到其他几个网站这样做了,但我希望在我努力实现这一点时得到一些最佳实践、技巧或问题。

最佳答案

我实际上建议不要将数据封装到 json 中,然后将其放入哈希中。
原因是 JSON 本身需要大量标记,并且实际上会打开一些安全漏洞,因为您稍后必须评估直接来自用户的代码。

作为更好的选择,我建议使用 x-www-form-urlencoded 作为封装。例如,如果这是您的状态对象:

var stateObject = {
  userName: 'John Doe',
  age: 31
}

然后你会创建一个这样的哈希片段:
// Create an array to build the output string.
var hashPartBuffer = [];
for (var k in stateObject) {
  hashPartBuffer.push(
    encodeURIComponent(k),
    '=',
    encodeURIComponent(stateObject[k]),
    '&'); 
}
if (hashPartBuffer.length) {
  // Remove the last element from the string buffer
  // which is '&'.
  hashPartBuffer.pop();
}
var hashPartString = hashPartBuffer.join('');
// This will now be 'userName=John%20Doe&age=31'

然后你将通过以下方式解析它:
var hashPartString = 'userName=John%20Doe&age=31';
var pairs = hashPartString.split(/&/);
var stateObject = {};
for (var i = 0; i < pairs.length; i++) {
  var keyValue = pairs.split(/=/);
  // Validate that this has the right structure.
  if (keyValue.length == 2) {
    stateObject[keyValue[0]] = keyValue[1];
  }
}

关于ajax - 在 URL Hash/Fragment 中存储 JSON 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5319405/

相关文章:

javascript - 如何将 jQuery Lazy 与 AJAX 结合使用?

javascript - 绕过并发 ajax 调用限制的最佳实践

c# - 每个 RIA 查询都会创建不同的 EF 对象上下文吗?

jquery - 如何在另一个 ajax 调用后运行一个 ajax 调用?

java - JSF 不工作 : Select SelectOneMenu And Dynamically Update Other SelectOneMenu With Ajax

json - 如何反序列化可以是数组或单个对象的 JSON

json - Ansible 按 json 属性分组

Javascript:如何将数组中的 JSON 数组转换为 CSV 文件?

ruby-on-rails - 在具有 RoR 的大型项目中使用 ExtJS 的危险?

javascript - 是否有以 HTML、CSS 和 JavaScript 实现的现有在线相册制作工具?