【问题标题】:trouble geting array values after dynamically building array in jquery在 jquery 中动态构建数组后无法获取数组值
【发布时间】:2014-12-19 15:53:48
【问题描述】:

这可能是我忽略的一些小事。我正在尝试在 jquery 中构建一个二维数组,然后在数组满后访问它。数组被填满,但后来数组似乎是空的。如何访问整个数组?

var infoWindow = new google.maps.InfoWindow();
var map;
var names = [];

$(document).ready(function() {
...
});

function createMarker(marker_id, point,street, neighborhood, date,map, infowindow, causeParam) {
            $.post('php/get_data.php', {marker_id:marker_id},
                 function(data){

                     obj = jQuery.parseJSON(data);

                 for (var j=0; j < obj.length; j++) {

                     names.push([marker_id,objVictimdata[j].lastname]);


                 }//end for

                var marker = new google.maps.Marker({
                  id: marker_id,
                  position: point,
                  map: map,
                  icon: {
                    path: fontawesome.markers.MAP_MARKER,
                    scale: 0.5,
                    strokeWeight: 0.2,
                    strokeColor: 'black',
                    strokeOpacity: 1,
                    fillColor: '#000000',
                    fillOpacity: 0.7
                  }
                });

               google.maps.event.addListener(marker, "click", function() {
                    infoWindow.setContent('<div class="scrollFix">'+markerhtml+'</div>'); //markerhtml not included in this example
                    infoWindow.open(map, marker);
                });

                google.maps.event.addListener(map, "click", function(event) {
                    infoWindow.close();
                });

                console.log(names.length); //returns a higher number each time the loop iterates

        })//end post
        console.log(names.length); //returns 0!

};//end create marker

为什么循环后返回0?如何访问整个数组?

【问题讨论】:

  • 我试过动态排序,但那是错误的。现在我正在考虑再进行一次 dB 调用,并按照我想要的方式直接从源头获取我的信息。

标签: jquery multidimensional-array


【解决方案1】:

它是一个异步函数(您的日志语句在您的请求仍在处理时被命中,因此null 数据),您需要使用回调:

function createMarker(marker_id, point,street, neighborhood, date,map, infowindow, causeParam, callback) {
    $.post('php/get_data.php', {marker_id:marker_id}, function(data) {
       ..
       ..
       callback(names)
    });
}

然后像这样使用回调:

createMarker(marker_id, point,street, neighborhood, date,map, infowindow, causeParam, function(names) {
    console.log(names);
});

【讨论】:

  • 我必须对此进行一些研究。
  • 回调似乎不是我需要的。
  • @LauraNMS -- 嗯..不确定你的意思 - 你有一个异步调用,你想使用来自...的数据。
  • 是的,@tymeJV 绝对正确。您的 console.log 语句在 $.post 函数之后,它是异步的。所以 post 函数运行,但不等待响应。相反,该线程继续使用您的 console.log 行。稍后,当触发 post 响应的事件监听时,您的主线程将被中断以运行事件处理程序(tymeJV 建议创建的回调)。
  • @tymeJV 是正确的 - 问题必须执行异步函数。谢谢,tymeJV 和 DaveS!我为解决这个问题所做的就是进行一个新的 php 调用,以我想要的格式(按字母顺序)引入我想要的数据。
猜你喜欢
  • 2019-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多