【问题标题】:How to return value from array to the function如何将值从数组返回到函数
【发布时间】:2015-11-18 16:57:14
【问题描述】:

这里我正在计算两个经纬度点之间的距离和时间。我几乎得到了答案,但我无法将值返回给函数。

请帮助我。提前致谢

我的编码是:

function initMap() {
         console.log(getDistanceandTime(srcRouteAddress.lat,srcRouteAddress.lng,destRouteAddress.lat,destRouteAddress.lng));

        function getDistanceandTime(lat1,lon1,lat2,lon2){
        var origin = {lat: parseFloat(lat1), lng: parseFloat(lon1)};
        var destination = {lat: parseFloat(lat2), lng: parseFloat(lon2)};
        var service = new google.maps.DistanceMatrixService;
        //var test = [];
        service.getDistanceMatrix({
            origins: [origin],
            destinations: [destination],
            travelMode: google.maps.TravelMode.DRIVING
        }, function (response, status) {
            if (status == google.maps.DistanceMatrixStatus.OK) {
                var test_values = [];
                var originList = response.originAddresses;
                for (var i = 0; i < originList.length; i++) {
                    var results = response.rows[i].elements;
                    for (var j = 0; j < results.length; j++) {
                        var test = results[j].distance.text + ' in ' + results[j].duration.text;
                        test_values.push(test);
                        console.log(test_values);
                    }
                }
                return test_values;
            }
            return test_values;
        });
    }

   }

【问题讨论】:

  • 使 var test_values = []; 成为全局的,当你调用它时该函数可以访问它。
  • 距离矩阵是异步的,你必须使用回调中的数据何时/何地可用。你想用test_values 数组做什么?
  • @geocodezip 你说得很好。我已根据您的观点更新了答案
  • 检查我更新的答案和一个类似问题的链接。 ajax调用时不能返回值。

标签: javascript php google-maps


【解决方案1】:

如果是同步调用,那么试试这个,你的var test_values = []; 应该在if (status == google.maps.DistanceMatrixStatus.OK) 条件之外。而且很可能 insideif (status == google.maps.DistanceMatrixStatus.OK) 没有执行

google.maps.DistanceMatrixStatus.OK 也是异步的,所以最好在if(google.maps.DistanceMatrixStatus.OK) 中返回值

所以试试这个

   function initMap() {
     console.log(getDistanceandTime(srcRouteAddress.lat,srcRouteAddress.lng,destRouteAddress.lat,destRouteAddress.lng));

    function getDistanceandTime(lat1,lon1,lat2,lon2){
    var origin = {lat: parseFloat(lat1), lng: parseFloat(lon1)};
    var destination = {lat: parseFloat(lat2), lng: parseFloat(lon2)};
    var service = new google.maps.DistanceMatrixService;
    //var test = [];
    service.getDistanceMatrix({
        origins: [origin],
        destinations: [destination],
        travelMode: google.maps.TravelMode.DRIVING
    }, function (response, status) {
                         var test_values = [];
        if (status == google.maps.DistanceMatrixStatus.OK) {

            var originList = response.originAddresses;
            for (var i = 0; i < originList.length; i++) {
                var results = response.rows[i].elements;
                for (var j = 0; j < results.length; j++) {
                    var test = results[j].distance.text + ' in ' + results[j].duration.text;
                    test_values.push(test);
                    console.log(test_values);
                }
            }
            return test_values;
        }

    });
  }

 }

【讨论】:

  • 当我再次在控制台中调用该函数时,它显示未定义
  • 检查你在 results.length 中得到了什么
  • 和在 originList.lengt
【解决方案2】:

试试这个..

var test_values = []; // global variable
function initMap() {
    // your code here
}

function showLatLng(){
    console.log(test_values); // will output the content
}

Javascript 在 UI 线程上运行;如果您的代码等待服务器回复,则浏览器必须保持冻结状态。 Ajax jquery async return value

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 2011-05-14
    相关资源
    最近更新 更多