我们已按照Tom Anthony's tutorial从英国邮政编码中计算出一个地理编码,以便在Google地图上绘制标记。效果很好,但是现在我们希望在单击位置时添加一个弹出窗口。因此,我们更新了函数以放置标记和原始的usePointFromPostcode代码以加入描述:
function usePointFromPostcode(postcode, description, callbackFunction) {
localSearch.setSearchCompleteCallback(null,
function() {
if (localSearch.results[0]) {
var resultLat = localSearch.results[0].lat;
var resultLng = localSearch.results[0].lng;
var point = new GLatLng(resultLat,resultLng);
callbackFunction(point, description);
}else{
alert("Postcode not found!");
}
});
localSearch.execute(postcode + ", UK");
}
// loop through the array of postcodes to output markers
for(var i=0; i<postcodes; i++) {
usePointFromPostcode(postcodes[i], descriptions[i], placeMarkerAtPoint);
}
但是,尽管页面加载没有错误,但是标记都具有相同的描述-数组中最后一项的描述。我相信这是由于关闭,或者说缺少一个,但是无法破解解决方案。我们如何使描述与要点保持同步?
最佳答案
如果localsearch.execute启动搜索但在搜索完成之前返回,则可以解释该行为。两种可能的解决方案。为每个查询创建一个单独的GlocalSearch对象,或者将发布第二个查询的时间延迟到第一个查询完成为止,依此类推。
我对GlocalSearch类了解得不够多,无法说说前者是否明智。如果是这样,您可能会并行运行多个搜索,这些搜索可能会以任意顺序完成。
稍后再做:更改您的回调以将global标志设置为true。在开始第一个搜索之前,将done设置为false。启动第一个搜索后,请设置超时。超时执行的代码执行以下操作:如果现在完成为true,则将done设置为false并启动第二个搜索。否则,它只会重复相同的超时。当然,这种事情会重复进行,直到所有搜索都完成为止,此时,超时代码将启动该循环后您想要执行的操作。请参阅http://www.ehow.com/how_4847411_simulate-whilesleep-loop-javascript.html以获得可能有用的简短文章。