【发布时间】:2014-01-15 01:40:38
【问题描述】:
或者至少我认为这是一个范围问题,如果我错了,请纠正我。
我有一个在我的地图上生成标记的 for 循环。每个信息窗口使用对 ajax 函数的回调来加载不同的内容。
我已简化此示例以概述问题。
var xhr = "";
var infowindow = new google.maps.InfoWindow();
var marker, i;
var polylineCoordinates = [new google.maps.LatLng(78.782762, 17.917843),
new google.maps.LatLng(-0.829439, -91.112473),
new google.maps.LatLng(15.066156, -23.621399),
]
function createHttpRequest() {
try {
xhr = new XMLHttpRequest();
return xhr;
}
catch (e)
{
//assume IE6
try {
xhr = new activeXBbject("microsoft.XMLHTTP");
return xhr;
}
catch (e) {
return alert("Unable to create an XMLHttpRequest object");
}
}
}
function initialize() {
var mapOptions = {
center: new google.maps.LatLng(78.782762,17.917843),
zoom: 10,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map_canvas"),
mapOptions);
}
//I recreated the polylineCoordinates array (see above)
//to try and replicate and real array in the script
for (i = 0; i < polylineCoordinates.length; i++) {
marker = new google.maps.Marker({
position: polylineCoordinates[i],
map: map
});
google.maps.event.addListener(marker, 'click', (function (marker, i) {
return function () {
infowindow.setContent("<div id=\"infowindow\">" + getStationInfo(infoWindowDiv) + "</div>");
infowindow.open(map, marker);
}
})(marker, i));
} //End adding markers loop
function infoWindowDiv(stationInfo) {
var add = document.createTextNode(stationInfo);
document.getElementById("infowindow").appendChild(add);
}
function getStationInfo(callback) {
//createHttpRequest() exists globally
var xhr = createHttpRequest();
var url = "stations.php" //edited out the original URL
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
var stationInfo = "This is a Test";
return callback(stationInfo)
} //end readyState
} //end readystatechange
xhr.open("GET", url, true);
xhr.send(null);
} //end getStationInfo
小编辑:将函数移出循环
编辑 2: ajax 调用没有任何问题,为了示例代码而编辑了 url。请注意,最终输出在信息窗口中显示“这是一个测试”,清楚地表明执行了成功的回调。此外,请注意没有 responseText 或 responseXml。被发回的变量与url无关
回调工作正常,但由于某种原因,它顶部带有可怕的“未定义”。
控制台什么也没显示。
输出:
undefined
This is a test
我做错了什么?如果有效,怎么可能是未定义的?
【问题讨论】:
-
您正在循环内定义函数 infoWindowDiv 和 getStationInfo,即您正在重新创建它们
polylineCoordinates.length次数。将它们移出该循环。这不应该导致您的问题,这只是不好的做法 -
@duncan,感谢您的意见。函数现在在循环之外,但功能保持不变......
-
你的
createHttpRequest函数在做什么? -
请提供足够的代码来复制问题(或小提琴或指向存在问题的页面的链接)。您不能在 getStationInfo 的 onreadystatchange 函数中返回任何内容。
-
它创建了一个 XMLHttpRequest()。我非常有信心这不是问题,因为它在脚本的不同部分都可以正常工作。我没有添加它,因此我可以将示例代码保持在主题上。我现在再补充一些。
标签: javascript ajax google-maps google-maps-api-3