在运行时加载BingMaps API
我想在JavaScript文件运行时加载Bing Maps API。这是我到目前为止,根据this。在运行时加载BingMaps API
var bingmap_link = 'https://www.bing.com/api/maps/mapcontrol?callback=loadMapScenario';
$.when(
$.getScript(bingmap_link),
$.Deferred(function(deferred){
$(deferred.resolve);
})
)
.done(function() {
console.log("done");
load_bing_map();
});
,但我会收到以下错误
TypeError: Microsoft.Maps.NetworkCallbacks.f_logCallbackRequest is not a function
于是,我又一次尝试:
$('head').append('<script type="text/javascript" src="https://www.bing.com/api/maps/mapcontrol?callback=loadMapScenario" async defer></script>');
load_bing_map();
但我在错误再次运行。
jQuery.Deferred exception: n is null [email protected]https://www.bing.com/api/maps/mapcontrol?callback=loadMapScenario:12:7416
在这两种情况下的load_bing_map()
功能看起来像这样。
function load_bing_map() {
var map = new Microsoft.Maps.Map('#mymap', {
credentials: 'MyKey'
});
}
代码在$().ready
触发器被触发后执行。
我错过了什么?
最后我不需要像
<head>
<script type='text/javascript' src='https://www.bing.com/api/maps/mapcontrol?callback=loadMapScenario' async defer></script>
</heady>
我只能做到这一点wuring运行的解决方案。
非常感谢。
您正在指定地图脚本URL中的回调函数,但在代码中没有具有该名称的函数。这是导致你看到的错误。此外,您拥有的代码不会按原样工作。地图控件异步加载一堆资源。因此,可以达到你的可执行函数,只有最初的JavaScript文件已被加载,其他资源都没有,所以地图API尚不可用。下面是一个代码示例,演示了如何延迟加载地图API:https://github.com/Microsoft/BingMapsV8CodeSamples/blob/master/Samples/Map/Lazy%20Loading%20the%20Map.html
,您可以尝试在这里:http://bingmapsv8samples.azurewebsites.net/#Lazy%20Loading%20the%20Map
完美的作品。谢谢 :) – Torben