0

次の変数 my_cords は、Google Maps 関数に到達したときに未定義です。誰もが理由を理解し、回避策を教えてもらえますか? 私はそれを一番上で定義し、コールバック関数内に設定しました.これは以前にグローバル変数で動作するのを見ました..

$(document).ready(function () {

var my_cords;
var map;

function getCareHome() {

    geocoder = new google.maps.Geocoder();

    //var address = document.getElementById("address").value;

    var address = "address here";

    geocoder.geocode( { 'address': address}, function(results, status) {

        if (status == google.maps.GeocoderStatus.OK) {

            my_cords = results[0].geometry.location;

        } else {

            alert("Sorry we couldn't locate the carehome on the map: " + status);
            return false;

        }

    });



    var myOptions = {
        zoom: 7,
        center: my_cords,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    }

    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

}

getCareHome();

});
4

3 に答える 3

4

geocoder.geocode は非同期関数です。設定する匿名関数はmy_cords、何らかのイベント (おそらく HTTP 応答の到着) が発生するまで実行されません。

実行に依存するコードをその関数内に移動します。

于 2012-06-14T15:00:25.857 に答える
3

.geocode非同期呼び出しです。

関数でコールバックを使用してみてください。

例えば:

geocoder.geocode( { 'address': address}, function(results, status) {

    if (status == google.maps.GeocoderStatus.OK) {

        createMap(results[0].geometry.location);

    } else {

        alert("Sorry we couldn't locate the carehome on the map: " + status);
        return false;

    }

});

var createMap = function(my_cords)  {
     var myOptions = {
        zoom: 7,
        center: my_cords,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    }

    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
}
于 2012-06-14T15:00:24.373 に答える
0

非同期geocodeで実行されるため、後で(設定)を使用するコードには、実行からの完了コールバックのの値が表示されます。my_cordsmyOptionsmy_cords geocodemyOptions.centerundefined

my_cordsを設定するときに必要な場合はmyOptions、そのコードのコールバックに移動する必要がありますgeocode

于 2012-06-14T15:02:29.503 に答える