1

可能重复:
更改 javascript 闭包内的全局变量

我在将数据存储在 javascript 全局数组中时遇到问题。即使我为它分配了一些元素,我也无法弄清楚为什么数组是空的。

基本上我有两个函数:loadMarkers每当用户单击按钮并从 JSON 中的 url 获取一些信息时调用,解析该数据并将其存储在全局数组中。另一个函数showMarkers只是遍历数组并显示所有标记,但该数组是空的!

提前致谢。

var markers = [];


function loadMarkers(url) {

    markers = [];
    $.get(url, function(data) {

        var json = jQuery.parseJSON(data);

        for (var i = 0; i < json.length; i++) {

            // parsing json
            var lat = json[i].Latitude;
            var lng = json[i].Longitude;
            var id = json[i].ID;

            console.log(id); // this prints with no problems!

            // create new marker
            var marker = new google.maps.Marker({
                position: new google.maps.LatLng(lat, lng),
                title: id,
                html: "<p>" + "Info for container " + id + "</p>"
            });

            // add marker to markers array        
            markers.push(markers[i]);

            // add info window to marker
            google.maps.event.addListener(marker, "click", function() {
                infoWindow.setContent(this.html);
                infoWindow.open(map, this);
            });
        }
    });
}

function showMarkers() {
    for (i = 0; i < markers.length; i++)
        console.log(markers); // here I get an empty array!
        markers[i].setMap(map);
}
4

3 回答 3

4

看起来像这条线:

markers.push(markers[i]);

应该改为:

markers.push(marker);
于 2012-11-28T16:26:27.287 回答
2

也许它是以下代码

// add marker to markers array        
markers.push(marker); // was markers[i]

关于评论中的第二个问题,该$.get()方法返回一个 jQuery 延迟对象,它允许您在方法完成后执行函数。

$.get().done( function( ) {
    // your code
});
于 2012-11-28T16:26:22.413 回答
1

代码中有一个错字:

markers.push(markers[i]);

应该:

markers.push(marker);

仅通过查看代码就很难发现这种拼写错误(就像我们的大脑经过训练可以让我们阅读我们期望阅读的内容)......在这种情况下,快速找到此类错误的最佳方法是在代码中添加一条debugger;指令,并通过您选择的开发工具跟踪程序的执行。

于 2012-11-28T16:27:58.397 回答