Как передать объект javascript с одной страницы на другую - PullRequest
8 голосов
/ 10 октября 2011

Я хочу передать объект javascript с одной страницы на другую, чтобы кто-нибудь мог сказать мне, как это сделать?

Возможно ли это сделать с помощью jQuery?

Ответы [ 7 ]

15 голосов
/ 10 октября 2011

Несколько способов

  1. Обратная передача на стороне сервера

    Создайте POST-форму на своей странице и сохраните сериализованный объект внутри скрытого ввода, а затем опубликуйте его на другой странице. Вы сможете обработать эти данные на сервере и, скорее всего, каким-то образом вернуть их на страницу. Либо как объект javascript, либо как-нибудь еще.

  2. Проверка URL-адреса на стороне клиента

    Сделайте GET-запрос к вашей другой странице, прикрепив сериализованный объект к URL-адресу как:

    http://www.app.com/otherpage.xyz?MyObject=SerializedData

    Эта другая страница может затем легко проанализировать свой URL и десериализовать данные, используя Javascript.

  3. Что входит в window.name = локальный кросс-страничный сеанс

    Это особый метод, который также используется в специальной библиотеке javascript , которая представляет window.name в качестве словаря, так что вы можете сохранить в нем много различных объектов и использовать его в качестве локальной кросс-страничной сессии , У него есть некоторые ограничения по размеру, которые могут повлиять на вас, но проверьте соответствующую страницу и проверьте свои браузеры.

  4. HTML5 локальное хранилище

    HTML5 имеет возможность локального хранилища, которое вы можете использовать именно для этих целей. Но его использование сильно зависит от требований вашего браузера. Современные браузеры поддерживают его, и данные могут быть восстановлены даже после перезапуска браузеров или компьютеров ...

  5. Печенье

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

Сериализация объектов Javascript

Вам, конечно, придется использовать какой-то (де) сериализатор на стороне клиента в некоторых верхних регистрах. Десериализаторы довольно легко найти (jQuery уже включает в себя отличную функцию $.getJSON()) и, скорее всего, уже являются частью вашей текущей библиотеки javascript (не говоря уже о eval()).

Но для сериализации объекта в строку JSON я бы порекомендовал библиотеку json2.js , которую также рекомендует Джон Резиг . Эта библиотека использует встроенные в браузер функции JSON (de) сериализации, если они существуют, или использует собственную реализацию, когда их нет. Отсюда и рекомендация.

5 голосов
/ 10 октября 2011

Это возможно только в том случае, если страницы существуют одновременно, и одна страница открывается из другой, так что у вас есть ссылка на объект Windows других страниц.

Если вы переходите с одной страницы нас другой стороны, они не существуют одновременно, поэтому вы не можете так общаться.Вам придется сериализовать объект в строку, которую вы можете отправить вместе в запросе, например, отправив JSON в строке запроса.

Существуют различные способы сохранения данных, например, в строке запроса, публикации данных., файлы cookie, имя окна или локальное хранилище HTML5, но все эти методы могут сохранять только строковые значения, но не объекты Javascript.

2 голосов
/ 10 октября 2011

Это возможно сделать, и у вас есть несколько вариантов.

Локальное хранилище

Может быть добавлено / отредактировано / удалено на любом этапе и доступно через домен. (изначально не работает в ie6 и ie7, однако для этого есть обходные пути)

Объект Window

Я бы положил вокруг него огромную пещеру, которая не является лучшим решением, она совсем не безопасна, поэтому используйте ее только для вещей, которые не нужно хранить в тайне. window.name = { "json" : "object"}, который затем доступен на следующей странице в свойстве window.name.

1 голос
/ 10 октября 2011

Если ваше приложение использует сеансы, вы можете сериализовать его (как в других ответах), а затем отправить его на сервер, где оно хранится в переменной сеанса.На следующей странице вы извлекаете его из переменной сеанса.

1 голос
/ 10 октября 2011

Я считаю, что единственный способ передать объект javascript с одной страницы на другую - это сериализовать его в строку и передать в URL. Например, если у вас есть объект

var temp = { id: 1, value: 'test' }

вы можете использовать JSON-js для сериализации и передачи, например, http://mysite.com/?data=serialization. Затем после загрузки страницы вам нужно десериализовать ее, например, с помощью $.parseJSON().

0 голосов
/ 15 февраля 2014

Некоторое время назад я написал библиотеку , которая может хранить большинство объектов js в localalstorage. Например, экземпляры ваших классов-прототипов со ссылками на другие объекты, включая собственные ссылки. Не забывайте, что поддержка IE слабая.

0 голосов
/ 10 октября 2011

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

Исключениями являются

  1. Cookies.
  2. Локальное хранилище.

Cookies действительно кроссбраузерны, но крайне ограничены в размерах.Вы не должны ожидать, что сможете надежно хранить более 4 КБ файлов cookie для страницы;на самом деле вы, вероятно, не должны использовать более 1 КБ.Данные cookie замедляют загрузку каждой страницы и других запросов, поэтому их следует использовать экономно.

Существуют различные типы локальное хранилище , доступные для Javascript, но единственный практичный кросс-браузерныйреализация этого HTML5 webstorage , который реализован во всех современных браузерах (IE8 +, FF, Chrome, Safari и т. д.), но особенно не реализован в IE6 или IE7, если это имеет значение.

Оба этих подхода сохраняют значение в браузере пользователя, которое можно сделать постоянным, чтобы его можно было записывать и читать на страницах одного и того же сайта, даже между просмотрами страниц (и даже часто между сеансами браузера или компьютером).перезагружается).

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