Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.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 未在地图上绘制标记_Javascript_Jquery_Json_Google Maps_Google Maps Api 3 - Fatal编程技术网

Javascript 未在地图上绘制标记

Javascript 未在地图上绘制标记,javascript,jquery,json,google-maps,google-maps-api-3,Javascript,Jquery,Json,Google Maps,Google Maps Api 3,我已经编写了下面的代码,从数据的角度来看,所有的代码都可以正常工作,数据以JSON格式从ajax调用返回,如下面的代码片段所示 问题似乎出在addMarker函数上,数据被传递到函数中。好的,我已经用addMarker函数中的alert()验证了这一点,但是没有在地图上绘制标记,也没有在浏览器或控制台中抛出错误 添加每个标记后是否需要调用setmaponal,以在地图上显示它?我尝试将setmaponal添加到addMarker函数的末尾,但没有任何更改 JSON: Javascript: $(

我已经编写了下面的代码,从数据的角度来看,所有的代码都可以正常工作,数据以JSON格式从ajax调用返回,如下面的代码片段所示

问题似乎出在
addMarker
函数上,数据被传递到函数中。好的,我已经用
addMarker
函数中的
alert()
验证了这一点,但是没有在地图上绘制标记,也没有在浏览器或控制台中抛出错误

添加每个标记后是否需要调用
setmaponal
,以在地图上显示它?我尝试将
setmaponal
添加到
addMarker
函数的末尾,但没有任何更改

JSON:

Javascript:

$(document).ready(function () {
var map;
var markers = [];

function loadMap()
{
    map = new google.maps.Map(document.getElementById('map_canvas'), {
        minZoom: 2,
        maxZoom: 12,
        zoom: 6,
        disableDefaultUI: true,
        zoomControl: true
    });

    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(function (position) {
            initialLocation = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
            map.setCenter(initialLocation);
        });
    } else {
        map.setCenter({lat: -34.397, lng: 150.644});
    }

    loadMarkerData(-1);
}

function addMarker(lat, lng) {
    var marker = new google.maps.Marker({
        position: {lat: lat, lng: lng},
        map: map
    });
    markers.push(marker);
}


function setMapOnAll(map) {
    for (var i = 0; i < markers.length; i++) {
        markers[i].setMap(map);
    }
}

function loadMarkerData(selectedKeys, year, source)
{
    var data = {id: 1};

    if (selectedKeys != '' && year != '' && source != '') {
        data = {id: 1, selectedKeys:selectedKeys, year:year, source:source};
    }

    $.ajax(
    {
        url: "ajaxcall.php",
        type: "POST",
        data: data,
        success: function (data, textStatus, jqXHR)
        {
            if (data != '') {
                markerObj = eval(data);

                $.each(markerObj, function(index, element) {
                    addMarker(element.lat, element.lng)
                });
            }
        },
        error: function (jqXHR, textStatus, errorThrown)
        {
            console.log(textStatus);
        }
    });
}
});
$(文档).ready(函数(){
var映射;
var标记=[];
函数loadMap()
{
map=new google.maps.map(document.getElementById('map_canvas'){
minZoom:2,
maxZoom:12,
缩放:6,
disableDefaultUI:true,
动物控制:正确
});
if(导航器.地理位置){
navigator.geolocation.getCurrentPosition(函数(位置){
initialLocation=new google.maps.LatLng(position.coords.lation,position.coords.longitude);
地图设置中心(初始位置);
});
}否则{
地图设置中心({纬度:-34.397,液化天然气:150.644});
}
loadMarkerData(-1);
}
功能添加标记器(lat、lng){
var marker=new google.maps.marker({
位置:{lat:lat,lng:lng},
地图:地图
});
标记器。推(标记器);
}
函数setMapOnAll(映射){
对于(var i=0;i
对于您的原始代码,我得到一个javascript错误:
断言失败:InvalidValueError:setPosition:不是LatLng或LatLngLiteral:在属性lat:不是数字中,因为这些值是字符串。您可以通过更改以下内容来解决此问题:

function addMarker(lat, lng) {
    var marker = new google.maps.Marker({
        position: {
            lat: lat,
            lng: lng 
        },
        map: map
    });
    markers.push(marker);
}
致:


使用
parsefloat
new google.maps.LatLng()
,使用
new google.maps.LatLng()
,哪一种方法是正确的?无论哪一种方法都有效,你关于为什么需要使用
google.maps.LatLng
的“解释”对我来说没有意义(我没有看到你在哪里“构建字符串”),我必须假设该方法强制您在内部传递的字符串参数为数字。
function addMarker(lat, lng) {
    var marker = new google.maps.Marker({
        position: {
            lat: lat,
            lng: lng 
        },
        map: map
    });
    markers.push(marker);
}
function addMarker(lat, lng) {
    var marker = new google.maps.Marker({
        position: {
            lat: parseFloat(lat),
            lng: parseFloat(lng)
        },
        map: map
    });
    markers.push(marker);
}