Код выше срабатывает после кода ниже

234
19 августа 2017, 03:56
$(".city_submit").click(function(){
    address = $(".s1_city_autocomplete").val();
    var googleGeocoder = new GeocoderJS.createGeocoder({'provider': 'google'});
    googleGeocoder.geocode(address, function(result) {
        console.log(result);
        str=JSON.stringify(result);
        alert(str);
        str=str.replace('[', '').replace('{', '').replace('}', '').replace(']', '');
        pararr=str.split(',');
        lat=pararr[0].replace('"latitude":','');
        lng=pararr[1].replace('"longitude":','');
        lat=parseFloat(lat);
        lng=parseFloat(lng);
        $(".names").val(address);
        $(".coords").eq(0).val(lat);
        $(".coords").eq(1).val(lng);
    })
    var mlayers = layers();
    var proj = dw.initProj();
    var cx = lng * 180 / Math.PI,
        cy = lat * 180 / Math.PI,
        rect = dw.viewsizeOf(),
        skyRadius = 0.6 * Math.sqrt((rect[2] - rect[0]) * (rect[2] - rect[0]) + (rect[3] - rect[1]) * (rect[3] - rect[1])),
        eaRadius = Math.sqrt((proj.p15 - 1.0) / (proj.p15 + 1.0)) * 180 / Math.PI,
        eaRadiusM = proj.a,
        rotate = dw.m.rotate,
        centerof = dw.viewcenterOf(),
        gmtime = getSelTime(),
        darkhide = ('earth' in mlayers);
    alert(cx);
    alert(cy);

Проблема заключается в том что сначала выводятся 2 нижних алерта а потом верхний и я не могу понять как это вообще возможно

Answer 1

Метод googleGeocoder.geocode выполняет AJAX-запрос, а вторым параметром принимает callback, который скорее всего исполняется асинхронно, т.е после того как удаленный сервер ответил.

Answer 2

Первый alert находиться внутри функции, которая требует некоторое время на инициирование запроса в службу геокодирования. В зависимости какой провайдер используется для источника данных (Google Maps, Bing и т.д.), время может разниться.

READ ALSO
JS. Как удалить <aside data-sidebar></aside> оставив все что внутри?

JS. Как удалить <aside data-sidebar></aside> оставив все что внутри?

Есть часть кода html (фильтр товара), он размещен внутри

184
Отобразить только первые 5 блоков [дубликат]

Отобразить только первые 5 блоков [дубликат]

На данный вопрос уже ответили:

311
Почему не видит контроллер в Angular?

Почему не видит контроллер в Angular?

Html: Сам контроллер: Вот что выскакивает в браузере:

239
datepicker plugin pickmeup как удалить прошедшие месяцы

datepicker plugin pickmeup как удалить прошедшие месяцы

как удалить прошедшие месяцы в pickmeup чтобы например сейчас август то значит предыдущих месяцев небыло в календаре?

217