2015-02-04 4 views
0

Я пытаюсь сохранить данные JSON, которые я получаю через AJAX в cookie jQuery. Для этого я использую следующий плагин: https://github.com/carhartl/jquery-cookie. Плагин отлично работает, когда я храню объекты без JSON. Я вижу, что он отлично работает при хранении простых строк. Однако, когда я пытаюсь сохранить данные JSON, полученные из моего вызова AJAX, cookie не сохраняется. Вот мой код:Хранение данных JSON в jQuery Cookie после успешного вызова AJAX

 $.ajax({ 
      dataType: "json", 
      url: "http://www.example.com/sandbox/BF/context/messagesNew.php", 
      success: function(data) { 

       //This works 
       $.cookie('Name', 'John'); 
       console.log($.cookie('Name')); 

       //This does not work 
       $.cookie("test-data", JSON.stringify(data)); 
       var myJSONCookie = JSON.parse($.cookie("test-data")); 
       console.log(myJSONCookie); // Returns error in console: SyntaxError: JSON Parse error: Unexpected identifier "undefined" 
      } 
     }); 

Я пробовал несколько других фрагментов кода, но никто из них не работал должным образом. Я даже не думаю, что test-data создается как файл cookie, потому что когда я зарегистрировал весь $.cookie(); на консоли, появляется мой файл cookie под названием Name, но test-data нет.

Любая помощь с этим оценивается!

+0

Я бы предложил вам добавить 'console.log (data)', чтобы увидеть, что такое переменная 'data'. Я предполагаю, что это 'undefined' или что-то, что не правильно строит – jfriend00

+0

@ jfriend00 Я сделал это, и это мой JSON. Я дважды проверял это, потому что думал то же самое. Любые другие мысли о том, что это может быть? – three3

+0

Укажите, как выглядят данные. Кроме того, попробуйте взять '-' из имени файла cookie в случае, если все испортится. И вы посмотрели в отладчике, чтобы узнать, какие там значения cookie? – jfriend00

ответ

0

Ценность, которую вы пытаетесь вставить в свой файл cookie, слишком велика для файла cookie. Печенье ограничено примерно 4k. Частично это относится к управлению хранилищами, и часть этого заключается в том, что каждый запрос на сервер отправляет с ним все файлы cookie. Если вы сохранили файл cookie размером 9 МБ, вы отправляете дополнительный 9 МБ с каждой отдельной страницей или аякс-запросом на этот сервер, что, очевидно, будет катастрофой.

LocalStorage - это еще один вариант с большими ограничениями на хранение, который по-прежнему разделен на один домен и не имеет проблемы с отправкой больших вещей на сервер по каждому запросу.

Если LocalStorage также недостаточно велик, вы можете приступить к рассмотрению только современных браузеров, содержащих что-то вроде IndexedDB, которые вы можете прочитать о here.

Возможно, вам нужен другой подход к дизайну. Возможно, мы могли бы помочь с идеями для другого подхода, но вам нужно будет понять общую проблему, которую вы пытаетесь решить, и почему вам нужно хранить 9 МБ локально и не можете просто извлечь ее с сервера, когда это необходимо в будущем?

+0

Я добавил информацию о IndexedDB, которая может быть вариантом, если вы можете жить с поддержкой браузера. – jfriend00

+0

Спасибо за всю информацию и помощь. Я нашел решение, которое работает для меня. Я просто создам файл с PHP, который хранит JSON при первом вызове AJAX. Затем каждый последующий вызов будет использовать файл JSON, созданный на моем сервере. Я просто использую '$ .cookie', чтобы отслеживать, могу ли я использовать файл JSON сервера или мне нужно получить новейшую информацию. Спасибо за помощь! – three3

+0

@ three3 - бинго - кэширование на сервере. – jfriend00

Смежные вопросы