2017-02-13 11 views
-1
var parsed = JSON.parse($.cookie('inavm_inventory')); 

inventoryID = parsed['ids']; 
inventoryName = parsed['names']; 
inventoryCount = parsed['productcount']; 

У меня есть печенье «inavm_inventory», который имеет в нем 3 массива, «иды», «имена» и «productcount».разбора печенье с JSON (массив), массив. «Толчок» в настоящее время не является функцией

У меня также есть 3 локальные переменные, как вы можете видеть выше.

В настоящее время добавление в файл cookie работает нормально - но когда пользователь загружает страницу, я пытаюсь перетащить массивы файлов cookie в локальные переменные.

Все работает отлично, без кода выше, но при использовании кода выше - он разбивает «массив». Я зарегистрировал значения, и они выглядят как массивы, но я предполагаю, что они могут быть отформатированы как строки.

Я просто пытаюсь отформатировать их обратно в массивы, так что .push снова работает с моими массивами.

Cookie пример данных:

{ 
    "ids": "[\"quant[2]\",\"quant[3]\"]", 
    "names": "[\"2 3 Seater Sofa\",\"0 2 Seater Sofa\"]", 
    "productcount": "[8,0]" 
} 
+1

Это действительно трудно, чтобы помочь только код, который вы публикуемую. (Также обратите внимание, что 'parsed ['ids']' может быть записан как 'parsed.ids'.) – Pointy

+0

То, как вы используете' parsed', не похоже, что это массив. Поэтому неудивительно, что вы вызываете 'parsed.push (...)', и это не работает (если это то, что вы даже делаете). –

+0

Пример данных файла cookie: {"ids": "[\" quant [2] \ ", \" quant [3] \ "]", "names": "[\" 2 3 Seater Sofa \ ", \ «0 2 Seater Sofa \"] "," productcount ":" [8,0] "} – user3676945

ответ

0

Ваше печенье содержит объект с тремя свойствами. Значения этих свойств - все строки, а не массивы.

Вот как это будет выглядеть, если они были массивами:

{ 
    "ids": ["quant[2]","quant[3]"], 
    "names": ["2 3 Seater Sofa","0 2 Seater Sofa"], 
    "productcount": [8,0] 
} 

Так что вы хотите посмотреть на то, что производит ценность печенья и исправить его, чтобы он выводит эти три массива правильно.

Если вы создаете его с JavaScript, это создало бы выше правильно (построение его из кусочков, выше также будет работать как единый блок, но это, вероятно, не так, как ты это делаешь):

var obj = {}; 
obj.ids = ["quant[2]","quant[3]"]; 
obj.names = ["2 3 Seater Sofa","0 2 Seater Sofa"]; 
obj.productcount = [8,0]; 

Или даже

var obj = { 
    ids: [], 
    names: [], 
    productcount: [] 
}; 
obj.ids.push("quant[2]"); 
obj.names.push("2 3 Seater Sofa"); 
obj.productcount.push(8); 
obj.ids.push("quant[3]"); 
obj.names.push(["0 2 Seater Sofa"]); 
obj.productcount.push(0); 

Затем создать печенье:

$.cookie('inavm_inventory', JSON.stringify(obj))); 

Вы могли бы рассмотреть вопрос об изменении структуры полностью, хотя и с использованием одного массива объектов:

[ 
    { 
     id: "quant[2]", 
     names: "2 3 Seater Sofa", 
     count: 8 
    }, 
    { 
     id: "quant[3]", 
     name: "0 2 Seater Sofa", 
     count: 0 
    } 
] 

Затем, как только вы разобран, вы бы использовать объекты:

console.log(parsed[0].id); // "quant[2]" 
console.log(parsed[0].name); // "2 3 Seater Sofa" 
console.log(parsed[0].count); // 8 

... и так далее (возможно, в петле).

Так вот вы бы начать с:

var products = []; 

И нажать полные элементы на этот массив:

products.push({id: "quant[2]", name: "2 3 Seater Sofa", count: 8}); 
+0

Спасибо за ваш вклад. Куки-файлы не допускают массивы, поэтому они являются строками. Я должен был упомянуть, что я использую stringify для этого, чтобы я мог помещать «массивы» в свой файл cookie, используя: document.cookie = "inavm_inventory =" + JSON.stringify ({ids: JSON.stringify (inventoryID), имена: JSON.stringify (inventoryName), productcount: JSON.stringify (inventoryCount)}) + "; max-age = 2592000;"; – user3676945

+0

@ user3676945: Конечно, cookie не разрешает массивы; поэтому я показал с помощью 'JSON.stringify' выше. Он будет работать так же хорошо, как и исходная структура. В обоих случаях мы сохраняем JSON, который является строкой. –

+0

Как посоветовал на этот пост, где я изначально нашел решение: http://stackoverflow.com/questions/2980143/i-want-to-store-javascript-array-as-a-cookie К которому я пользуюсь используя JSON.parse для извлечения массивов обратно из stringify ... однако, это приводит к тому, что моя текущая проблема не связана с массивом типов. Как-то нужно преобразовать их обратно в массивы. Я попытался использовать «inventoryID = [inventoryID]», чтобы преобразовать их в массивы таким образом, но не работает слишком хорошо. – user3676945