загрузка 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", () => {
  /* Ваш код*/
});
→ Ссылка