загрузка KML в Yandex картах
1.Имеем рабочий php, который импортирует файл KML c локального компьютера, размещает в директории на сайте, создает путь к файлу. Путь отражается через echo или print.
2.Имеем рабочий JS, который выкладывает на карту KML по ссылке. Если я копирую ссылку из echo и вставляю в указанный JS он исполняет свою работу.
При попытке забрать путь для JS из echo через var filekml = '<?php echo $fileUrl; ?>'; ничего не происходит, php также не срабатывает и файл не размещается в директории. В консоли висит ошибка 400 bad. Я пробывал разные конструкции, с разными обертками, не хочет.
Собственно, как путь из PHP забрать в JS, где я невнимателен...? Опыта мало...
Полный JS
var kmlButton = $('.load-kml');
kmlButton.click(function (e) {
ymaps.geoXml.load(filekml)
.then(onGeoXmlLoad);
e.target.disabled = true;
});
// Обработчик загрузки XML-файлов.
function onGeoXmlLoad(res) {
map.geoObjects.add(res.geoObjects);
if (res.mapState) {
res.mapState.applyToMap(map);
} else {
map.setBounds(res.geoObjects.getBounds());
}
}
Ответы (1 шт):
В вашем случае проблема в том,что при загрузке страницы, по всей вероятности, ваш js код просто не видит переменную filekm т.к загружается в начале страницы.
Первый вариант решения, вы можете подключить работу js логики в конце документа, чтобы при вызове переменной filekm она была доступной.
Второй вариант, я думаю правильнее будет не создавать переменную в виде:
var filekml = '<?php echo $fileUrl; ?>';
я бы просто сделал так:
<input type="hidden" id="filekml" value="<?php echo $fileUrl; ?>">
а в самом js файле просто можно взять эту переменную:
var filekml =$('#filekml').val();
и самое главное не забыть об очереди загрузки, вам нужно разместить ваш js код в:
если с jQuery
$(document).ready(function () {
/* Ваш код*/
});
без jQuery
document.addEventListener("DOMContentLoaded", () => {
/* Ваш код*/
});