Javascript将参数传递给回调函数

时间:2014-03-17 15:48:55

标签: javascript google-maps-api-3 asynchronous

我有一个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'在日志中被称为未定义。等待解决方案。感谢。

1 个答案:

答案 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”并且你得到你想要的效果。