Повторно заполнить сложные объекты Javascript из JSON - PullRequest
1 голос
/ 09 октября 2009

Скажем, у меня есть веб-форма, которая состоит из поля ввода текста, кнопки «Добавить» и кнопки «Отправить». Пользователь может добавить текст в div, набрав некоторые входные данные и нажав Add, что динамически (с использованием javascript) добавит div к тому, что он напечатал. Также во время добавления я сохраняю текст в объекте javascript. После добавления одного или нескольких элементов пользователь нажимает кнопку Отправить, чтобы отправить данные в объекте javascript на сервер для сохранения. Данные сериализуются в строку JSON и отправляются на сервер.

Проблема, с которой я сталкиваюсь, это когда, скажем, «Обновить» при добавлении записей. Я хочу, чтобы текущие добавленные записи оставались не только отображенными на странице, но и в объекте javascript.

Что у меня есть, так это то, что после каждого добавления я использую AJAX для отправки текущего списка на сервер и сохранения его в качестве данных сеанса. Каков наилучший способ вернуть данные из моего сеанса обратно в клиентский объект javascript?

Лучшее, что я могу придумать, - это вставить строку JSON обратно на страницу, а затем использовать клиентский javascript для повторного заполнения объекта javascript. Это будет работать, но если объем данных становится очень большим, я ожидаю, что обработка JavaScript на стороне клиента будет медленной.

(Обратите внимание, что в моей реальной ситуации мой объект javascript намного сложнее, чем этот. В нем есть функции, в которых я реализовал наследование, и есть прототипы методов "get" и "set" и тому подобное для динамического построения довольно сложного объекта. набор объектов. Другими словами, я не могу просто перезаписать свой объект с помощью eval (JSON).)

РЕДАКТИРОВАТЬ: Обратите внимание, что это не просто Обновить, где это вступает в игру. Ранее отправленные наборы данных могут быть отредактированы, и в этот момент мне нужно будет повторно заполнить объект javascript на стороне клиента, данные которого на стороне сервера.

1 Ответ

1 голос
/ 09 октября 2009

Это довольно широкий вопрос, и поэтому может не быть однозначного ответа на проблему. Позвольте мне тогда это прокомментировать.

  • Моя первая реакция (если бы я был руководителем проекта) была бы: «Не беспокойтесь о кнопке обновления». Я не думаю, что кто-то разумно ожидает, что кнопка обновления сохранит любое состояние. Вот почему это называется обновить. Он ведет себя так с самого начала Интернета, и поэтому я не думаю, что с этим нужно бороться. Да, сегодня может быть прискорбно, что он все еще здесь и ведет себя так, как он, и я уверен, что этого не было бы здесь, если бы сеть была изобретена сегодня.

  • Но если вам действительно по какой-то причине необходимо сохранить государство, я думаю, что вы делаете, это хорошее решение. Если вы обращаетесь к современным браузерам (IE8 +, Firefox 2+, Safari 3+ и т. Д.), Я бы также рекомендовал рассмотреть хранилище DOM . Это было бы, возможно, более элегантно - сессия сервера не требуется.

  • Вот еще один (случайный) комментарий. Насколько серьезно, когда пользователь теряет состояние, если нажимает кнопку обновления? Что если вы подключитесь к событию window.onunload и предупредите пользователя, что там он может потерять некоторые данные? Этого будет достаточно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...