2009-10-08 3 views
1

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

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

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

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

(Обратите внимание, что в моей реальной ситуации мой javascript-объект намного сложнее, чем этот. Он имеет функции, в которых я реализовал наследование и прототипировал методы «получить» и «установить» и, таким образом, динамически построить несколько Иными словами, я не могу просто перезаписать свой объект, используя eval (JSON).)

EDIT: Обратите внимание, что это не просто Обновить, где это входит в игру. Ранее представленные наборы данных могут быть отредактированы, и в это время мне нужно будет повторно заполнить объект javascript на стороне клиента, которые будут на стороне сервера.

ответ

1

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

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

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

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

+0

Ну, это не только кнопка «Обновить». Все, что было отправлено, может быть позже отредактировано, и в то время подобное решение необходимо для повторного заполнения объекта javascript из данных сервера. – 2009-10-08 20:38:23

+0

ОК. Но пользователь попадает в submit, данные, по-видимому, сохраняются в какой-то базе данных, и в следующий раз, когда страница отображается для редактирования, вы вытаскиваете ее из базы данных и визуализируете страницу, нет? Так что да, это может быть много утомительной работы.Вам необходимо передать данные со страницы (предположительно как JSON) и использовать одни и те же функции JavaScript для воссоздания динамически добавленных div. Возможно, я бы даже рассмотрел уже существующие данные напрямую как HTML (лучший пользовательский интерфейс). Я думал, что исходный вопрос был больше о том, как сохранить еще не сохраненные данные. –

+0

Я могу повторно заполнить страницу без проблем. Это переполняет клиентский объект javascript, который является болью. Не потому, что мне больно писать код, а потому, что я бы хотел как-то заполнить его со стороны сервера, а не на стороне клиента на загрузке страницы. – 2009-10-08 21:00:52

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