Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用JSON标记填充google地图_Javascript_Php_Json_Google Maps_Google Maps Api 3 - Fatal编程技术网

Javascript 用JSON标记填充google地图

Javascript 用JSON标记填充google地图,javascript,php,json,google-maps,google-maps-api-3,Javascript,Php,Json,Google Maps,Google Maps Api 3,我正在尝试用标记填充谷歌地图。每个标记的信息都包含在此数组中: [{"id":"1","name":"toler","lng":"110.33929824829102","lat":"-7.779369982234709","created_at":"2014-02-21 16:19:28","updated_at":"2014-02-21 16:19:28"},{"id":"2","name":"hallo :)","lng":"110.36865234375","lat":"-7.79773

我正在尝试用标记填充谷歌地图。每个标记的信息都包含在此数组中:

[{"id":"1","name":"toler","lng":"110.33929824829102","lat":"-7.779369982234709","created_at":"2014-02-21 16:19:28","updated_at":"2014-02-21 16:19:28"},{"id":"2","name":"hallo :)","lng":"110.36865234375","lat":"-7.797738383377609","created_at":"2014-02-21 16:19:49","updated_at":"2014-02-21 16:19:49"}]
但是,我的地图没有显示标记。我在javascript中使用以下代码:

getLocations();

 function getLocations() {

   alert('hello');
    $.ajax({
        type: "GET",
        url: "http://localhost:8888/public/test",
        dataType: "jsonp",
        success: function(json){
            $.each(json, function(i, entry){
                PlotMarker(json[i].lat, json[i].long);
            });
        },
        error: function(err){
            console.log(err);
        }
    });
}

function PlotMarker(lat, long){
    var marker = new google.maps.Marker({
        position: new google.maps.LatLng(lat, long),
        map: map,
        draggable: false,
        animation: google.maps.Animation.DROP
    });
    markerLocations.push(marker);
}
有没有办法解决这个问题?调用此url

http://localhost:8888/public/test 
返回上面显示的JSON

任何帮助都将不胜感激

谢谢

编辑:

尝试更改:

PlotMarker(entry.location.lat,entry.location.lng)

致:

PlotMarker(entry.lat、entry.lng)

尝试更改此选项:

PlotMarker(entry.location.lat, entry.location.lng);
致:

我认为这是由于外部[]的原因。

initialize
函数之外声明map变量。这是其他函数能够看到它的唯一方式:

var map;
function initialize() {
  var markers = [];
  var latLng = new google.maps.LatLng(-7.8,110.3666667);
  map = new google.maps.Map(document.getElementById('map-canvas'), {
    zoom: 13,
    center: latLng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  });
}

主要问题是在启动
initialize()
之前调用了
getLocations()
。您必须注释掉
getLocations()
并将其移动到
initialize()
函数的末尾

这还不够:
map
定义必须移动到
initialize()
函数之外,不应在
initialize()
函数内部重新定义

未定义在
PlotMarker()
中使用的
markerlocation
。应定义为全局类
map

var map;
var markerLocations = [];

function initialize() {
    ...
    map = new google.maps.Map(document.getElementById('map-canvas'), {
        zoom: 13,
        center: latLng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    });
    ...
    getLocations();
}
PlotMarker()
的调用方式如下:

PlotMarker(entry.lat, entry.lng);

您是否调用过初始化函数?当页面加载时调用它

google.maps.addDomListener(window, 'load', initialize);

如图所示。

这些功能的顺序是什么?你先叫哪个,然后叫哪个

我遇到过这种问题,发生的情况是,地图还没有加载完所有的瓷砖,因此无法在这些瓷砖上放置标记,因此它们不会出现。但是当您在控制台中检查时,标记对象就在那里

我就是这样解决的:

google.maps.event.addListener(map, 'tilesloaded', function() {
    plotMarkers();
    google.maps.event.clearListeners(map, 'tilesloaded');
});

它确保在打印标记之前完全加载地图分幅。在这种情况下,标记肯定是可见的。

哪里声明了
gmap
?您是指初始化函数吗?如果您在
initialize
中声明了
gmap
,使用
var
则其他函数将无法看到它。在函数外部声明
gmap
,比如:
var gmap
,然后在函数内部声明
initialize
只要执行
gmap=whatever
。如果我提取出这个变量,我的映射就不再显示了。是的,从您更新的问题来看,
map
是局部初始化。其他函数无法看到它。不幸的是,这似乎没有帮助。我已经用更新后的代码编辑了这个问题。把你所有的代码放在一个JSFIDLE中,我将接受一个squiz。这是我完整的js代码。这些功能的大部分都是为了让用户能够将一个新点保存到数据库中。您正在
初始化
中重新说明
map
。它应该是
map=new google.maps.map(…
而不是
var-map=new google.maps.map(…
这里是一个JSFIDLE,除了json数组外,还有完整的代码。
google.maps.addDomListener(window, 'load', initialize);
google.maps.event.addListener(map, 'tilesloaded', function() {
    plotMarkers();
    google.maps.event.clearListeners(map, 'tilesloaded');
});