лучший способ отправить JSON на страницу во время создания - PullRequest
2 голосов
/ 16 ноября 2011

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

  1. <script>var myJson = <? echo json_encode($myVar); ?>;</script>

    преимущество: json находится непосредственно в javascript, если и будет использоваться.
    неудобно: <script> в середине html / dom плохо (js принадлежат файлам .js).

  2. <div data-myJson='<? echo json_encode($myVar); ?>'>

    преимущество: с данными html5 легко работать.
    неудобно: куча данных в DOM, выглядит не очень элегантно. В моем случае я могу позволить себе игнорировать «старые» браузеры.

  3. ajax all.

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

  4. вместо отправки полного json, сохраните его в сеансе и отправьте ключ.

    преимущество: меньше данных перемещается
    неудобно: необходимо отслеживать пару данных / сеансов, и мне нравится, чтобы мой сеанс содержался в чистоте и порядке.(даже если пользователь просто закроет страницу до завершения потока) (что не закроет сеанс).

  5. Cookies.

    преимущество: герр ... разве обратное зло - хорошая вещь?
    неудобно: как переменные сеанса, но вне клетки.

  6. Сохраните json в сеансе и добавьте его при загрузке страницы.

    преимущество: несколько элегантно концептуально.
    неудобно: тяжело, так как инструкция ajax должна быть добавлена ​​в файл js, а сеанс должен управляться.(и очищено. Если загрузка страницы не закончится, json останется, пока я не очистлю его или сеанс не завершится).Плюс заголовок html означает большую пропускную способность, и мы должны ждать успеха, чтобы использовать объект.

  7. прочее?

edit: как кажется,немного путаницы, с опцией 3 «ajax everything» я имел в виду одну загрузку страницы и весь контент, загружаемый ajax, даже если вы просматриваете меню, ссылки на другие страницы, формыпредставить и тому подобное.Я рассматриваю более традиционную навигацию (страницы, отправленные сервером как новые страницы), когда страница выполняет запрос ajax для получения некоторого значения (здесь, моего объекта json) на сервере, как в пункте 4 «сеанс», какОсновные данные должны оставаться на сервере после отправки страницы, чтобы затем получить запрос ajax.Я добавил опцию 6 для этого.

Ответы [ 2 ]

6 голосов
/ 16 ноября 2011

Я без колебаний рекомендую # 1.Вы хотите использовать свои данные в JavaScript, верно?# 1 - это самый простой и прямой способ гарантировать, что ваши данные существуют, как обычный старый объект javascript, при загрузке страницы.Я все время таким образом передаю данные со стороны сервера на сторону браузера, и это прекрасно работает.

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

0 голосов
/ 03 мая 2016

Прошло несколько лет с тех пор, как об этом спросили, но для всех, кто находит себя здесь и любопытным, я довольно долго делал вариант № 1. Кроме того, Nike Plus делает это также. Когда страница загружается, Nike устанавливает window.np = {}

Я никогда не находил конвенции, которую люблю, но я пробовал:

window.data

window.app.data (по мотивам Symfony буквально использует атрибут app)

window.[app_name].data (по мотивам Nike Plus)

window.initData (по мотивам Google +)

В моем случае я перезаписываю эти объекты JS моделями / коллекциями Backbone при загрузке основного приложения Backbone.

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