gpt4 book ai didi

javascript - Google Maps Ajax 多个标记 Json

转载 作者:行者123 更新时间:2023-11-30 16:33:32 28 4
gpt4 key购买 nike

我有以下内容:https://jsfiddle.net/inkedraskal/h35dz9qd/5/

我收到一个错误:无法分配给 0 的只读属性“__e3_”

我以前有一个 for 循环,它在 for 循环之后调用函数,但 jshint 不接受它。所以现在我正在使用 Ajax,但我被卡住了。我可以返回控制台中的对象以及第一个信息框内容(请参阅控制台),然后出现错误。

js如下:(任何提示,技巧等将不胜感激)

(function () {
renderGoogleMap();


function renderGoogleMap() {
var start_point = new google.maps.LatLng(0, 0);

// Creating a new map
var map = new google.maps.Map(document.getElementById("locations-map"), {
center: start_point,
zoom: 6,
mapTypeId: google.maps.MapTypeId.ROADMAP
});



// Creating a global infoWindow object that will be reused by all markers
var infoWindow = new google.maps.InfoWindow();

function setMarkerPoints(map,marker) {
var bounds = new google.maps.LatLngBounds();
// Looping through the JSON data

// Creating a closure to retain the correct data, notice how I pass the current data in the loop into the closure (marker, data)



$.ajax({
type: "GET",
url: 'https://raw.githubusercontent.com/roryheaney/jsonexample/master/locatoins.json',
dataType: "json",
success: function (data) {
console.log(data);

if (data.length !== 0) {

var latLng = new google.maps.LatLng(data.lat, data.lng);

// Creating a marker and putting it on the map
var marker = new google.maps.Marker({
position: latLng,
map: map,
title: data.title
});


$.each(data, function (marker, data) {
var windowContent = '<h3>' + data.title + '</h3>' +
'<p>' + data.description + '</p>';
console.log(windowContent);

// Attaching a click event to the current marker
infobox = new InfoBox({
content: infoWindow.setContent(windowContent),
alignBottom: true,
pixelOffset: new google.maps.Size(-160, -45)
});

google.maps.event.addListener(marker, 'click', function () {

// Open this map's infobox
infobox.open(map, marker);
infobox.setContent(windowContent);
map.panTo(marker.getPosition());
infobox.show();
});
google.maps.event.addListener(map, 'click', function () {
infobox.setMap(null);
});
});

}


},
error: function (data) {
// alert('Please refresh the page and try again');

console.log('Please refresh the page and try again');
}

});
//END MARKER DATA


// bounds.extend(marker.getPosition());

// end loop through json

map.setCenter(start_point);
map.fitBounds(bounds);
}
setMarkerPoints(map);
}

})();

最佳答案

变化列表:

1.Google Maps API 包含它自己的事件,该事件在页面加载后触发,因此我替换了以下行:

(function () {
renderGoogleMap();

//...


})();

function renderGoogleMap() {
//...
}

google.maps.event.addDomListener(window, 'load', renderGoogleMap);

2.增加了marker lat/lng bounds的初始化。

3.一些其他的小修复。

Working example

代码片段:

function renderGoogleMap() {
var start_point = new google.maps.LatLng(0, 0);

// Creating a new map
var map = new google.maps.Map(document.getElementById("locations-map"), {
center: start_point,
zoom: 6,
mapTypeId: google.maps.MapTypeId.ROADMAP
});



// Creating a global infoWindow object that will be reused by all markers
var infoWindow = new google.maps.InfoWindow();

function setMarkerPoints(map, marker) {
var bounds = new google.maps.LatLngBounds();


$.ajax({
type: "GET",
url: 'https://raw.githubusercontent.com/roryheaney/jsonexample/master/locatoins.json',
dataType: "json",
success: function(data) {

if (data.length !== 0) {


$.each(data, function(marker, data) {


var latLng = new google.maps.LatLng(data.lat, data.lng);
bounds.extend(latLng);

// Creating a marker and putting it on the map
var marker = new google.maps.Marker({
position: latLng,
map: map,
title: data.title
});


var windowContent = '<h3>' + data.title + '</h3>' +
'<p>' + data.description + '</p>';

// Attaching a click event to the current marker
infobox = new InfoBox({
content: infoWindow.setContent(windowContent),
alignBottom: true,
pixelOffset: new google.maps.Size(-160, -45)
});

google.maps.event.addListener(marker, 'click', function() {

// Open this map's infobox
infobox.open(map, marker);
infobox.setContent(windowContent);
map.panTo(marker.getPosition());
infobox.show();
});
google.maps.event.addListener(map, 'click', function() {
infobox.setMap(null);
});
});
map.fitBounds(bounds);

}

},
error: function(data) {
console.log('Please refresh the page and try again');
}
});
//END MARKER DATA

// end loop through json

}
setMarkerPoints(map);
}


google.maps.event.addDomListener(window, 'load', renderGoogleMap);
// renderGoogleMap();
#locations-map {
display: block;
height: 500px;
}
.infoBox {
max-width: 300px;
background: #fff;
padding: 10px;
border: 1px solid red;
}
.infoBox img {
border: 1px solid yellow;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="https://maps.googleapis.com/maps/api/js"></script>
<script src="https://google-maps-utility-library-v3.googlecode.com/svn/trunk/infobox/src/infobox.js"></script>
<div id="locations-map"></div>

关于javascript - Google Maps Ajax 多个标记 Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32999693/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com