Клуб API Карт

Проблема с хотспотами (активные области)

Пост в архиве.

Пытаюсь добавить слой активных областей, вылезает ошибка hotspot_callback undefined.

4 комментария
lopatinskaya.viktoriya
28 января 2016, 04:54

код вот такой:

 

    hotspotLayer = new ymaps.hotspot.Layer(

        new ymaps.hotspot.ObjectSource(

            function (tile, zoom) {

                return 'Hotspot.test.js';

            }

        )

    ) ;

 

Hotspot.test.js представляет собой пример со страницы http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/hotspot.ObjectSource.xml

Комментарий удалён
lopatinskaya.viktoriya
28 января 2016, 04:54

вернет урл, по которому размещается информация об объектах в указанном формате

Хотспоты работают через формат jsonp.

На сервер отправляется запрос за данными. Одним из параметров всегда является callback - это название функции, которая должна быть запущена, когда загрузятся данные.

Подразумевается, что при формировании ответа на сервере будет учтен параметр callback запроса, и данные "обернутся" в нужный callback.

По умолчанию хотпоты случайным образом генерируют названия функции-колбека, передают его в качестве параметра в запрос за данными и ждут ответа. То есть в примере хотспотный загрузчик создал имя колбека сам (что-то в стиле 'id_123434134'), создал такую функцию и ждет, когда же ее вызовут.

В примере из документации функция имеет название hotspot_callback, поэтому когда данные подгружаются, браузер пытается найти функцию с таким именем. Функции не существует, падает ошибка.

 

Если вы хотите, чтобы название функции-обработчика не создавалось случайно, можно переопределить функцию getKey у hotspot.ObjectSource.

 

var source = new ymaps.hotspot.ObjectSource(function (tile, zoom) {return 'Hotspot.test.js'});

source.getKey = function () {return 'hotspot_callback'};

 

В этом случае хотспотный загрузчик будет ожидать, что в загруженном файле данные будут обернуты в функцию "hotspot_callback" и код из примера сработает.

lopatinskaya.viktoriya
28 января 2016, 04:54

все получилось)

спасибо вам огромное