Как я могу сохранить объект массива javascript, сохраненный каким-то образом, чтобы впоследствии его использовать

У меня есть следующая ситуация:

У меня есть страница выбора идентификатора, где пользователь может выбрать идентификатор из показанных идентификаторов на странице. Когда пользователь выбирает идентификатор i, я сохраняю их как разделенное запятыми значение в скрытом поле ввода.

      <input type="hidden" values="234,678,987" />

У меня есть кнопка, которая при нажатии открывается диалоговое окно, которое затем отображает выбранные идентификаторы. Иды, показанные здесь, я беру из скрытого поля. Теперь у меня есть требование хранить идентификатор и имя продукта. Вероятно, в этом случае, что я должен делать, потому что теперь я не могу сохранить эту структуру данных в скрытом поле ввода. Даже если я использую массив javascript, как я могу сохранить этот массив и использовать его в будущем для отображения. Можно ли сохранить объект массива в скрытом поле ввода.... и получить его позже как объект массива снова??

Ответы

Ответ 1

Здесь JSFiddle.

Если вы хотите сохранить объект в поле ввода, вы можете использовать JSON.stringify():

 //Pass your array (or JSON object) into JSON.stringify:
 JSON.stringify([{id:1, product_id: 2, name: 'stack'},
                 {id: 2, product_id: 2, name: 'overflow'}] )

который даст:

 "[{"id":1,"product_id":2,"name":"stack"},{"id":2,"product_id":2,"name":"overflow"}]"

Вы можете сохранить это значение в скрытом поле (или атрибуте данных):

 <input type="hidden" id="project" value="[{'id':1,'product_id':2,'name':'stack"',{'id':2,'product_id':2,'name':'overflow'}]" />

Очевидно, вы можете объединить эти шаги (или сделать это через PHP/Rails/...)

 $('#project').val(JSON.stringify([1,2,3]));

Затем вы можете декодировать это, используя, например, jQuery:

 $.parseJSON($('#project').val());

Это должно позволить вам использовать процесс, который вы используете, но храните объекты Javascript в своих полях ввода. Надеюсь, это поможет!

Ответ 2

Вы можете

  • сохранить значение в памяти, используя JS

    var arr = [];
    arr.push(your_value);
    
  • продолжать создавать новый атрибут/значения в dom с помощью JS
  • передать значение со страницы на страницу с помощью строки запроса
  • сохранить значение в файле cookie, который будет снова получен.
  • сохранить значение на сервере (в файле /db ) для повторного получения

Примечание:
Варианты 3 и 5 имеют смысл только в том случае, если вы хотите перейти на другую страницу (на сайте).
Варианты 4 и 5 хороши, если вы хотите закрыть браузер и получить эту информацию в более поздней точке.

Ответ 3

Если вас не беспокоит IE7, вы можете использовать localStorage:

window.localStorage.setItem('myArray', JSON.stringify([234,678,987]));
// retrieve
var myArray = JSON.parse(window.localStorage.getItem('myArray'));

JSON поддерживается современными браузерами. Вы можете добавить его, включив json2.

Ответ 4

Я предполагаю, что вы говорите о сохранении данных после загрузки новой страницы. Вы можете использовать свой текущий подход для хранения данных в виде строки в скрытом вводе, а затем проанализировать эту строку в JavaScript-объекте позже. Другой вариант заключается в том, что ваш код на стороне сервера может создать некоторый встроенный JavaScript, объявляющий требуемый объект JavaScript. Например, если вы используете ASP.NET, ваша страница может иметь что-то вроде этого:

// Assuming "serverSideIds" is declared as a List<string>

<% var serializer = new JavaScriptSerializer(); %>
var ids = <%= serializer.Serialize(serverSideIds) %>;