Невозможно прочитать свойство prototype нулевой карты bing

Я ввел карты Bing в свой код с помощью интерактивного SDK Bing Maps V8. Моя проблема в том, что когда я загружаю карту времени Microsoft, а не всегда, я получаю сообщение об ошибке:

«Uncaught TypeError: не удается прочитать свойство 'prototype', равное нулю»

Я не понимаю, что это, потому что я следовал предложениям «интерактивного SDK» на веб-сайте Bing Map Dev Center.

ОШИБКА

Uncaught TypeError: Cannot read property 'prototype' of null
at k (mapcontrol?key=key:14)
at n.h [as create] (mapcontrol?key=key:14)
at e (mapcontrol?key=key:14)
at t.l [as instance] (mapcontrol?key=key:14)
at n.h [as create] (mapcontrol?key=key:14)
at e (mapcontrol?key=key:14)
at t.l [as instance] (mapcontrol?key=key:14)
at new Microsoft.Maps.Map (mapcontrol?key=key:16)
at createBingMap (tracking.js:19)
at tracking.js:118

HTML

<script src="https://www.bing.com/api/maps/mapcontrol?key=YOURKEY"></script>

JAVASCRIPT

    (function()
    {
        if(Modernizr.geolocation)
        {           
            navigator.geolocation.getCurrentPosition(function(position)
            {
                  var latitude = position.coords.latitude;
                  var longitude = position.coords.longitude;
                  var bingResource = ajaxGeoReverse(latitude, longitude);
                  var comune = bingResource[0].toString();
                  var provincia = bingResource[1].toString();

                  createBingMap(latitude, longitude);

                  var positionLocality = {
                    "comune": comune, "provincia": provincia
                  };

                  $.ajax(
                    {
                      type: 'POST',
                      url: 'https://civicsensethecitizen.altervista.org/php/formTrackingTable.php',
                      data: {'items': JSON.stringify(positionLocality)},
                      dataType: 'json',
                      success: function(data) 
                      {
                          $.each(data, function(index, item)
                          {
                              var pushping = createPushpin(map.getCenter(), item.ID, item.Categoria, item.Gravita);
                              map.entities.push(pushping);

                              $('#tracking tbody').append(
                                    '<tr>' + 
                                    '<td id = "segnalazioneID">' + item.ID +
                                    '<td>' + item.Data +
                                    '<td>' + item.Posizione +
                                    '<td>' + item.Categoria +
                                    '<td>' + item.Stato +
                                    '</tr>');
                          });
                      },
                      error: function()
                      {
                        alert('Connsessione non riuscita');
                      }
                    });

            }, failGeo);
        }
    });

    function ajaxGeoReverse(latitude, longitude)
    {
        var bingResource = [];

        $.ajax( 
        {
            url: 'https://dev.virtualearth.net/REST/v1/Locations/' + latitude + ',' + longitude,
            async: false,
            data: {
              key: 'YOURKEY',
              o: 'json'
            },
            success: function(data)
            {
                var result = data.resourceSets[0];

                if (result) 
                {
                    if (result.estimatedTotal > 0) 
                    {
                        var comune = JSON.stringify(result.resources[0].address.locality);
                        var provincia = JSON.stringify(result.resources[0].address.adminDistrict2);

                        bingResource = [comune, provincia];
                    }
                } 
            },
            error: function()
            {
                failGeo();
            }
        });
        return bingResource;
    };

    function createBingMap(latitude, longitude)
    {
        if(typeof Microsoft !== undefined && typeof Microsoft.Maps !== undefined && Microsoft.Maps.Map !== null)
        {
            var navigationBarMode = Microsoft.Maps.NavigationBarMode;

            map = new Microsoft.Maps.Map(document.getElementById('container-gmap'), 
            {});

            map.setView(
            {
                mapTypeId: Microsoft.Maps.MapTypeId.aerial,
                center: new Microsoft.Maps.Location(latitude, longitude)
            });

            map.setOptions(
            {
                maxZoom: 15,
                minZoom: 12
            });
        }
        else
        {   
            setTimeout(createBingMap, 500);
        }
    };

Вы можете увидеть свой ключ API в сообщении ОШИБКА, пожалуйста, измените свой ключ API.

Mark 26.10.2018 09:09

Возможно связанный: stackoverflow.com/questions/43162044/…

tanderson 26.10.2018 09:12

Добро пожаловать в Stack Overflow! Похоже, вы разместили конфиденциальную / личную информацию. Пожалуйста, сбросьте свои пароли и / или отозвите ключи и токены API. Вы также можете отредактировать информацию и пометить свое сообщение, чтобы модератор отредактировал историю изменений.

Samuel Liew 26.10.2018 09:30

Ok. Я модифицировал пост, простите за некорректную публикацию поста. Я уже проверял этот пост, но он не решил мои проблемы, к тому же я не использую angular

CivicSense 26.10.2018 09:36
2
4
1 413
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Похоже, есть вероятность, что код навигатора попытается добавить объекты на карту до того, как карта полностью загрузится. Это вопрос времени. Рассмотрите возможность запуска кода геолокации после загрузки карты.

Ответ принят как подходящий

Это известная проблема (см., Например, эта ветка), которая возникает, когда карта инициализируется, но элемент управления Bing Maps не загружен.

Здесь доступны как минимум два решения:

1) Используйте событие load, чтобы убедиться, что элемент управления Bing Maps был загружен, например:

window.addEventListener("load", function(){
    navigator.geolocation.getCurrentPosition(function(position) {
        initMap(position.coords);
    });
});

Демо

2) Укажите имя функция обратного вызова в URL-адресе скрипта карты:

<script type='text/javascript' src='http://www.bing.com/api/maps/mapcontrol?callback=initMap&key=[YOUR_BING_MAPS_KEY]' async defer></script> 

Функция initMap будет запущена после загрузки Bing Maps Control.

Большое спасибо. Ваше решение верное и решило мою проблему.

CivicSense 07.11.2018 09:18

Другие вопросы по теме