Рекомендации по хранению JSON в хэше / фрагменте URL - PullRequest
4 голосов
/ 16 марта 2011

Я создаю одностраничное приложение AJAX и хотел бы при определенных обстоятельствах сохранять состояние в JSON после хэша URL (#).Я видел пару других сайтов, которые делают это, но я надеюсь получить несколько лучших советов, советов или советов, как я работаю, чтобы реализовать это.

Ответы [ 2 ]

7 голосов
/ 18 марта 2011

Я бы действительно советовал не инкапсулировать данные в 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];
  }
}
3 голосов
/ 18 июля 2012

Возвращаясь, чтобы ответить на мой собственный вопрос - я могу засвидетельствовать, что кодирование URL (даже частично) строки JSON прекрасно работает в нашей производственной среде.

Ex. источник JSON:

{"mode":21,"popup":18,"windowId":2}

Ex. закодировано в URL:

http://example.com/my-ajax-app#%7B%22mode%22:21,%22popup%22:18,%22windowId%22:2%7D

Для небольшого количества JSON, такого как выше, у нас не было проблем ни с одним браузером (даже в IE7). Большие строки JSON мы не тестировали.

...