我有一个javascript代码,用于计算用户位置和模糊地址数组之间的距离。如果我没有错,它会使用google maps api中的距离矩阵。在getDistanceMatrix函数成功的情况下,异步调用回调函数。现在,我需要能够将特定值传递给此回调函数,以便我能够替换相应的表行。
function getDistance(position){
origin = new google.maps.LatLng(parseFloat(position.coords.latitude),parseFloat(position.coords.longitude));
for (var i=0;i<mpoints_arr.length;i++){
destination = mpoints_arr[i][2];
service = new google.maps.DistanceMatrixService();
service.getDistanceMatrix(
{
origins: [origin],
destinations: [destination],
travelMode: google.maps.TravelMode.DRIVING,
avoidHighways: false,
avoidTolls: false
},
callback(i)
);
}
}
function callback(response, status, j){
if(status == "OK"){
alert(response.rows[0].elements[0].distance.text);
console.log(j);
//rows[i].getElementsByTagName('td')[3].innerHTML = response.rows[0].elements[0].distance.text;
} else {
alert("Error: " + status);
}
}
然而,对象'j'在日志中被称为未定义。等待解决方案。感谢。
答案 0 :(得分:4)
您需要更改当前的回调函数,以便创建回调函数并将其返回。
function callback(j){
return function(response, status) {
if(status == "OK"){
alert(response.rows[0].elements[0].distance.text);
console.log(j);
//rows[i].getElementsByTagName('td')[3].innerHTML = response.rows[0].elements[0].distance.text;
} else {
alert("Error: " + status);
}
}
}
通过执行此操作,您将使用单独的函数在另一个函数的循环中制作(并保留)“i”值的副本。这个新版本的“回调”返回将用作服务的实际回调的函数。因为实际的回调函数使用了循环索引的保存副本,所创建的每个回调都将拥有它自己的“j”并且你得到你想要的效果。