Ситуация: загружаются XML-файл и карты Гугла, чтобы данные из XML на ней отобразить. Делается всё асинхронно, требуется отследить, когда оба запроса выполнены.
Единственный простой способ, который я нашёл — Deferred objects в jQuery.
Пишем
function loadXML() {<br/>
return $.ajax({ url: 'data.xml', dataType: 'xml' });<br/>
}
Возвращаемый объект засовываем в $.when
$.when( loadXML(), ... ).then(function(){<br/>
doSomethind();<br/>
});
Проблемы возникают с загрузкой карты. Гугл предлагает следующий код для асинхронной загрузки:
function loadScript() {<br/>
var script = document.createElement("script");<br/>
script.type = "text/javascript";<br/>
script.src = "http://maps.google.com/maps/api/js?sensor=false&callback=initialize";<br/>
document.body.appendChild(script);<br/>
}<br/>
Хочется знать, когда скрипт будет загружен и произойдёт обращение к initialize(). Первая мысль — запихать в initialize() ручное создание deferred-объекта и возвращать .promise(), но непонятно, что же добавить в $.when, чтобы тот сработал после того, как все методы API карт стали доступны.
Спасибо.