在全局数组中存储javascript数据不能按预期工作

时间:2012-11-28 16:21:35

标签: javascript

  

可能重复:
  change global variable inside javascript closure

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

基本上我有两个函数:只要用户单击一个按钮并从JSON中的url获取一些信息,就会调用loadMarkers,解析该数据并将其存储在全局数组中。另一个函数是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);
}

3 个答案:

答案 0 :(得分:4)

看起来像这一行:

markers.push(markers[i]);

应改为:

markers.push(marker);

答案 1 :(得分:2)

可能是以下代码

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

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

$.get().done( function( ) {
    // your code
});

答案 2 :(得分:1)

代码中有一个拼写错误:

markers.push(markers[i]);

应该是:

markers.push(marker);

通过查看代码来发现这种拼写错误是非常困难的(就像我们的大脑经过培训让我们阅读我们期望阅读的内容一样)...在这种情况下,最好的方法是快速找到这些一种错误是在代码中添加debugger;指令,并通过您选择的devtools执行程序。