Загружать JSON во время выполнения, а не динамически через AJAX - PullRequest
0 голосов
/ 28 декабря 2008

Не думаю, что это можно сделать "чисто", но я все равно спрошу.

У меня есть система, которая должна получить JSON-ресурс через вызов REST GET для инициализации. В данный момент система ожидает события onLoad и запускает ajax-запрос для извлечения ресурса, что я не думаю, что это лучший способ сделать это, так как ресурс необходим во время выполнения.

Что я хотел бы сделать, так это как-то загрузить ресурс во время выполнения внутри тега HTML, а затем проверить содержимое. Но я работаю над API, который будет использоваться другими, поэтому я хотел бы добиться этого логичным и основанным на стандартах способом.

Так есть ли тег, который отвечает требованиям? Тег, который можно поместить в заголовок документа, который я смогу прочитать и оценить во время выполнения?

С уважением,

Chris

Ответы [ 5 ]

3 голосов
/ 28 декабря 2008

Может быть, я не понимаю, но не могли бы вы просто:

<?php
$json_data = json_encode($your_data);
?>

<script>
var data = <?= $json_data ?>;
</script>
2 голосов
/ 28 декабря 2008

Будет ли для вас проблемой отсутствие кэширования CDN (Akamai и т. Д.)? Если нет, вы можете удалить тег сценария на странице, указать атрибут src на сценарий на стороне сервера, который возвращает содержимое с типом mime javascript и содержит запрошенный вами объект JS. Это было бы как включение внешнего скрипта, только динамически генерируемого.

Ex:

В голове есть что-то вроде:

<script src="/js/loadjs.php?id=123"></script>

И пусть loadjs.php возвращает что-то вроде:

var MyApp.initData = { id: 123, setting1: "xyz" };

Недостатком является то, что вы не сможете кэшировать его через CDN. Я думаю, что кеширование браузера все равно будет работать, если вам нужно.

1 голос
/ 28 декабря 2008

У вас есть контроль над любым сервером? Потому что, если да, вы можете использовать свой сервер для прокси-службы и обернуть ответ JSON соответствующим оператором "var".

В качестве альтернативы, я считаю, что это сработает (я не проверял это, и я всегда неправильно капитализирую "innerHtml"), хотя IMO это не очень чисто:

<script id="data" src="http://someotherserver.com/json.js"></script>
<script type="text/javascript">
    var dataElem = document.getElementById("data");
    if (dataElem)
    {
        var myData = eval(dataElem.innerHtml);
    }
</script>

Предупреждение Surgeon General: вывод результатов с сервера, который вы не контролируете, является плохой идеей.

1 голос
/ 28 декабря 2008

Я думал о том, чтобы поместить его в iframe, но потом понял, что у вас есть проблема с этим типом контента application / json. Когда я тестировал FF, IE и Chrome пытались загрузить файл и спрашивали пользователя, где его хранить (Opera отображала файл)

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

Мне кажется, вы должны использовать AJAX. Можете ли вы объяснить, почему это проблема?

0 голосов
/ 28 декабря 2008

JSON сам по себе ничего не делает; Вы не можете просто использовать <script>, чтобы включить его, потому что он создаст объект, который будет назначен ... никуда. Вам придется изменить его - либо поместите его в строку JS для анализа, либо вставьте перед ним var foo =.

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