У меня есть несколько файлов js в папке host/public/js. В моем html у меня есть список с несколькими ссылками, представляющими файлы js.
Чего я пытаюсь добиться, так это того, что при нажатии на ссылку (например, <a href = "">file1.js</a>
) файл1.js (упомянутый в <head> <script src = "/js/file1.js" type = "text/javascript"></script> </head>
в моем html-файле) должен использоваться для отображения карт, созданных с помощью листовки (библиотека JavaScript для интерактивных карт).
Есть ли способ создать этот инструмент «выбор файла javascript» с помощью PHP, Javascript, twig или jquery?
Скрипты могут быть предварительно загружены или нет?
Что именно вы имеете в виду под "предварительно загруженным"??? извините, я новичок в этом деле :-/
Хотя можно динамически загружать js-файлы, загрузка новых js-файлов не подходит для поставленной задачи (в основном потому, что вы не можете избавиться от скрипта после его загрузки). Ищите «СПА», чтобы найти лучшую технику для этой задачи.
@nico, ничего не зная о ваших целях, трудно посоветовать вам лучший курс действий. Под «предварительной загрузкой» я подразумеваю простое включение (<script>) сценариев в заголовок страницы (<head>). Если вам просто нужно вызвать разные функции, которые находятся в разных файлах, это может сработать, но также может быть неоптимальным. Более чистым, но более сложным способом может быть извлечение (загрузка) файлов, когда они вам нужны. Уточните, пожалуйста, ваши цели, чтобы получить более конкретный ответ.
@RoAchterberg «следует использовать для отображения/форматирования моего контента» говорит достаточно, динамическая загрузка файлов js для этого не очень хорошая идея.
Было бы сложно динамически добавлять Js для форматирования содержимого, это означало бы, что каждый файл должен быть совместим с любым другим ранее загруженным Js (может отменить то, что было отформатировано ранее). Простым решением было бы перезагрузить всю страницу с параметром (например, GET через URL-адрес), и чтобы PHP вставил правильный тег сценария на страницу.
мои файлы js - это веб-карты (листовка). Идея состоит в том, чтобы отображать другую карту (файл js) при нажатии на ссылку.
Да, это возможно. Что вы пробовали до сих пор, где вы застряли?
Возможно, вы неправильно подходите к своей проблеме.
По сути, вы хотите изменить состояние своей страницы, когда что-то нажимается на этой странице. И для этого вам нужно что-то получить с вашего сервера.
Я думаю, вы должны рассмотреть это:
У вас есть только один файл javascript, который вы можете назвать application.js, который вы загружаете вместе с элементом сценария. В этом файле у вас будет весь ваш код javascript.
Когда произойдет щелчок, ваш код выполнит асинхронный запрос на получение данных с вашего сервера и соответствующим образом изменит вашу страницу.
Пример (с jQuery):
$.ajax({
url: url,
jsonp: false,
dataType: "json"
}).done(function(data){
processJSON(data);
});
Полный пример здесь: http://franceimage.github.io/map/
Когда вы нажимаете на первый значок на левой боковой панели, вы можете выбрать другой набор точек. Затем он получает данные с сервера (/карта/данные) и меняет внешний вид карты.
Это то, что вам нужно?
Я неправильно решил свою проблему. Решение было https://api.jquery.com/jQuery.getScript/.
Я получаю свои js-скрипты асинхронно с сервера. Контейнеры (в которых рендерятся карты) перезагружаются с помощью document.getElementById('id_map_container').innerHTML = "<div id='map'></div>";
(см. обновить карту листовки: контейнер карты уже инициализирован)
В приведенном выше примере есть только одна листовка, а данные (желтые точки) извлекаются и отображаются на базовой карте.
В моем случае у меня есть много файлов js, которые нужно запросить. Таким образом, решением было jQuery.getScript( url [, success ] )
, что на самом деле является сокращением и эквивалентом
$.ajax({
url: url,
dataType: "script",
success: success
});
Возможный дубликат Динамически загружать файл JavaScript