我正在尝试在JavaScript文件的运行时加载Bing Maps API。以下是我迄今为止所得到的内容,基于this。
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不是 功能
所以我尝试了另一次尝试:
$('head').append('<script type="text/javascript" src="https://www.bing.com/api/maps/mapcontrol?callback=loadMapScenario" async defer></script>');
load_bing_map();
但是我再次遇到错误:
jQuery.Deferred异常:n为null 沃顿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>
我只能在运行时这样做。
答案 0 :(得分:2)
您正在地图脚本网址中指定回调函数,但在代码中没有具有该名称的函数。这导致你看到的错误。此外,您拥有的代码不会按原样运行。地图控件异步加载一堆资源。这样,就可以达到你的can中的done函数,只加载了初始的javascript文件,其他资源都没有,所以map API还没有。这是一个代码示例,演示如何延迟加载地图API:https://github.com/Microsoft/BingMapsV8CodeSamples/blob/master/Samples/Map/Lazy%20Loading%20the%20Map.html
您可以在此处试用:http://bingmapsv8samples.azurewebsites.net/#Lazy%20Loading%20the%20Map