我有一个javascript元素数组。每个元素都包含address
和唯一id
。
var elements =
[
{
id: 1,
address: "address1"
},
{
id: 2,
address: "address2"
}
];
元素地址经过地理编码,结果标记显示在Google地图中,如this post所示。
for (var i = 0; i < elements.length; i++) {
$.getJSON('http://maps.googleapis.com/maps/api/geocode/json?address='+elements[i].address+'&sensor=false', null, function (data) {
// add marker to map
console.log(data.results[0]);
});
}
现在我的目标是将每个标记与正确的请求相关联。例如,假设第一个地理编码(id=1
)导致标记位于(lat: 15.0526206, lng: 19.6929845)
。我想找到一种方法将此标记与id=1
元素相关联。
我已尝试记录数据结果(请参阅上面的代码段),但遗憾的是它无效(formatted_address
与原始元素address
类似,但格式不同,因此字符串比较不可行)。我该怎么办?
答案 0 :(得分:1)
您需要创建closures:
for (var i = 0; i < elements.length; i++) {
$.getJSON('http://maps.googleapis.com/maps/api/geocode/json?address=' +
encodeURIComponent(elements[i].address),
null,
(function(element){
return function(data){
console.log(element.id,data.results[0]);
}
}(elements[i])));
}
但是对于客户端地理编码请求,您应该使用javascript-API的方法(请求Web服务可能会失败,因为无法保证将发送相应的标头)
var geocoder=new google.maps.Geocoder();
for (var i = 0; i < elements.length; i++) {
geocoder.geocode({address:elements[i].address},
(function(element){
return function(data){
console.log(element.id,data[0]);
}
}(elements[i])));
}