2017-08-24 19 views
0

我想在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運行的解決方案。

非常感謝。

回答

1

您正在指定地圖腳本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

+0

完美的作品。謝謝 :) – Torben