0

以下变量 my_cords 在进入谷歌地图功能时未定义,任何人都可以理解为什么并可能给我一个解决方法吗?我已经在顶部定义了它并将它设置在一个回调函数中,我之前已经看到它在全局变量上工作..

$(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 是一个异步函数。在某些事件(可能是 HTTP 响应的到达)触发之前,设置的匿名函数my_cords不会运行。

将依赖于它运行的代码移动到该函数内部。

于 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运行,您的代码使用later(设置)将在运行的完成回调之前看到 的值- 也是如此。my_cordsmyOptionsmy_cords geocodemyOptions.centerundefined

如果您my_cords在设置 时需要myOptions,您必须将该代码移到geocode.

于 2012-06-14T15:02:29.503 回答