我有一个简单的Google地图v3代码。它创建地图并向markerCluster添加标记。除了将内容设置到infoWindow并打开它之外,它一切正常。
函数getSupplierDetails()
只返回一个短字符串(即“Red Supply”)。
问题在于:如果我将文本“Red Supply”硬编码到像infoWindow.setContent("Red Supply");
这样的setContent行,那么infowindow就可以打开内容。
但是如果我保留它,就像在下面的代码中一样,infowindow根本不打开,尽管getSupplierDetails()
函数返回“Red Supply”。
getSupplierDetails()
函数从Firebug返回此JSON字符串:{"popupContent": "Red Suppplier"}
。
在没有任何解决方案的情况下花了很长时间。任何帮助表示赞赏。
由于
var map;
var markerCluster;
var infoWindow;
$(document).ready(function() {
if (mapElem != null) {
var latlng = new google.maps.LatLng(54.664936, -2.706299);
var myOptions = {
zoom: 5,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP,
};
map = new google.maps.Map(mapElem, myOptions);
markerCluster = new MarkerClusterer(map);
infoWindow = new google.maps.InfoWindow();
AddMarkers();
}
});
function AddMarkers(){
markerCluster.clearMarkers();
var marker = new google.maps.marker({position:latLng, map:map, title:"title"});
google.maps.event.addListener(marker, 'click', function() {
var res = getSupplierDetails();
infoWindow.setContent(res);
infoWindow.open(map, this);
});
markers.push(marker);
markerCluster.addMarkers(markers);
}
function getSupplierDetails() { //returns {"popupContent": "Red Suppplier"}
$.ajax({
type: 'POST',
url: "sitedetail.aspx",
dataType: 'json',
timeout: 30000,
success: function(data) {
return data.popupContent;
},
error: function(xhr, textStatus, thrownError) {
var resp = JSON.parse(xhr.responseText);
alert(resp.message);
}
});
}
答案 0 :(得分:0)
function getSupplierDetails() { // returns "Red Suppplier" or ""
var content = '';
$.ajax({
type: 'POST',
url: "sitedetail.aspx",
dataType: 'json',
timeout: 30000,
success: function(data) {
content = data.popupContent;
},
error: function(xhr, textStatus, thrownError) {
var resp = JSON.parse(xhr.responseText);
alert(resp.message);
}
});
return content;
}
答案 1 :(得分:0)
ajax成功调用是异步的,这就是为什么你得到null,你做的很好(将SetContent移动到de success部分)但你也可以这样做
google.maps.event.addListener(marker, 'click', function() {
getSupplierDetails(function(res){
infoWindow.setContent(res)
});
infoWindow.setContent(res);
infoWindow.open(map, this);
});
function getSupplierDetails(callback) {
$.ajax({
type: 'POST',
url: "sitedetail.aspx",
dataType: 'json',
timeout: 30000,
success: function(data) {
callback(data.popupContent);
},
error: function(xhr, textStatus, thrownError) {
var resp = JSON.parse(xhr.responseText);
alert(resp.message);
}
});
}