Jon*_*nes 0 javascript asynchronous google-maps-api-3
我有一个 JavaScript 代码,它计算用户位置和模糊地址数组之间的距离。如果我没记错的话,它使用谷歌地图 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);
}
}
Run Code Online (Sandbox Code Playgroud)
然而,据说对象“j”在日志中未定义。等待解决方案。谢谢。
您需要更改当前的回调函数,以便它创建回调函数并返回它。
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
通过这样做,您将使用一个单独的函数在另一个函数的循环中创建(并保留)“i”值的副本。这个新版本的“callback”返回将由服务用作实际回调的函数。因为实际的回调函数使用保存的循环索引副本,所以创建的每个此类回调都将拥有自己的“j”,并且您将获得所需的效果。
归档时间: |
|
查看次数: |
1415 次 |
最近记录: |