2

クライアントから地理位置情報を取得し、Ajax ごとに場所を読み込み、それらをリストに表示したいと考えています。

関数getGeolocationloadLocationおよびがありcreateListます。

getGeolocationおよびloadLocation非同期関数であるため、コールバックが必要か、遅延オブジェクトを使用します。インターネットで数時間検索しましたが、これを処理する方法の構文がまだわかりません。

関数内と関数内で呼び出すことができることはわかっていますが、loadLocationsこの関数をいくつかの場所で呼び出したいので、オプションではありません。successcreateListafterResponse

var lat = 0;
var long = 0;
var locations;

getGeolocation();
loadLocations();
createList();

    $('#map').live("pageshow", function() {    
        google.maps.event.trigger(map, 'resize');
    });

function getGeolocation(){    
    console.log("getGeolocation");
    if (navigator.geolocation) {

             // getCurrentPosition ruft die Funktion success auf und übermittelt die Position Werte
             // error wird ausgeführt wenn es einen Fehler beim ermitteln der Position gibt
        navigator.geolocation.getCurrentPosition(success, error);
    } else {
        alert("GeoLocation API ist NICHT verfügbar!");
    }

}

function success(position) {    
    console.log("success");
    lat = position.coords.latitude;
    long = position.coords.longitude;
}

function error(msg) {    
    console.log(typeof msg == 'string' ? msg : "error");
}


function loadLocations(){    
    console.log("loadLocations");
    return $.ajax({
        type: "GET",
        url: "http://www.example.at/api/getLocationsByGeodata_JSON",
        success: afterResponse,
        /*beforeSend: showPreloader,*/
        data: {lat : lat, long: long},
        dataType: 'json'
    });
}

function afterResponse(response_objekt) {    
    console.log("afterResponse");
    console.log(response_objekt['results']);
    locations = response_objekt['results'];
}
4

1 に答える 1

0

これを達成するためにコールバック関数を使用できると思います

元:

var lat = 0;
var long = 0;
var locations;

getGeolocation(function(){
    loadLocations().done(function(){
        createList();
    });
});

    $('#map').live("pageshow", function() {    
        google.maps.event.trigger(map, 'resize');
    });

function getGeolocation(successCallback){    
    console.log("getGeolocation");
    if (navigator.geolocation) {

             // getCurrentPosition ruft die Funktion success auf und übermittelt die Position Werte
             // error wird ausgeführt wenn es einen Fehler beim ermitteln der Position gibt
        navigator.geolocation.getCurrentPosition(getCurrentPositionCallback(successCallback), error);
    } else {
        alert("GeoLocation API ist NICHT verfügbar!");
    }

}

function getCurrentPositionCallback(callback){
    return function (position) {    
        console.log("success");

        if(typeof callback == 'function'){
            callback(position);
        }

        lat = position.coords.latitude;
        long = position.coords.longitude;
    };
}

function error(msg) {    
    console.log(typeof msg == 'string' ? msg : "error");
}


function loadLocations(){    
    console.log("loadLocations");
    return $.ajax({
        type: "GET",
        url: "http://www.example.at/api/getLocationsByGeodata_JSON",
        success: afterResponse,
        /*beforeSend: showPreloader,*/
        data: {lat : lat, long: long},
        dataType: 'json'
    });
}

function afterResponse(response_objekt) {    
    console.log("afterResponse");
    console.log(response_objekt['results']);
    locations = response_objekt['results'];
}
于 2012-10-22T15:43:23.967 に答える