在其指定的方法之外访问javascript变量

时间:2015-10-21 05:16:01

标签: javascript jquery json ajax

我想在其指定的方法之外访问名为locations的javascript变量。

Javascript代码:

$(document).ready(function() {
    var locations;
    console.log('document ready');
    function initializeMap() {
      $.ajax({url: "getlocation.php",
            success: function(result){
              locations = $.parseJSON(result);
              alert(locations);
            }
      });

    var map = new google.maps.Map(document.getElementById('map_canvas'), {
      zoom: 10,
      center: new google.maps.LatLng(-33.92, 151.25),
      mapTypeId: google.maps.MapTypeId.ROADMAP
    });

    var infowindow = new google.maps.InfoWindow();

    var marker, i;
    for (i = 0; i < locations.length; i++) {  
      marker = new google.maps.Marker({
        position: new google.maps.LatLng(locations[i][1], locations[i][2]),
        map: map
      });

      google.maps.event.addListener(marker, 'click', (function(marker, i) {
        return function() {
          infowindow.setContent(locations[i][0]);
          infowindow.open(map, marker);
        }
      })(marker, i));
    }

  }
  initializeMap();
});

如何将json解析后的数据传递给locations变量,以便我可以在其指定的方法之外获取数据并进入循环?

以下是解决我问题的已完成代码:

$(document).ready(function() {

    console.log('document ready');

    function initializeMap() {
    var locations;
    $.ajax({url: "getlocation.php",

            success: function(result){
            alert(result);
             locations = $.parseJSON(result);
            alert(locations);
             }
        });

    var map = new google.maps.Map(document.getElementById('map_canvas'), {
      zoom: 10,
      center: new google.maps.LatLng(-33.92, 151.25),
      mapTypeId: google.maps.MapTypeId.ROADMAP
    });

    var infowindow = new google.maps.InfoWindow();

    var marker, i;

    for (i = 0; i < locations.length; i++) {  
      marker = new google.maps.Marker({
        position: new google.maps.LatLng(locations[i][1], locations[i][2]),
        map: map
      });

      google.maps.event.addListener(marker, 'click', (function(marker, i) {
        return function() {
          infowindow.setContent(locations[i][0]);
          infowindow.open(map, marker);
        }
      })(marker, i));
    }

  }
  initializeMap();
});

“按引用传递”和“按值传递”是两个编程术语,描述了将变量传递给方法时方法的行为方式。

1 个答案:

答案 0 :(得分:1)

在排除代码块之后调用该函数,因此在对象的位置被赋值后为其赋值,这就是为什么你看到未定义的。有两种方法可以解决这个问题,1)将代码块放在函数内部或2)初始化后直接调用函数! 一般提示:不要使用ready函数,而是在body标记结束之前放置脚本,避免出现很多问题!