Javascript 返回未定义函数

Javascript 返回未定义函数,javascript,jquery,return,Javascript,Jquery,Return,我试图创建一个简单的函数来返回基于浏览器的用户位置,但它始终返回未定义的位置: function getLocation() { //get current location var geo_param; if(navigator.geolocation) { navigator.geolocation.getCurrentPosition(function(position) { // Create geolocation paramet

我试图创建一个简单的函数来返回基于浏览器的用户位置,但它始终返回未定义的位置:

  function getLocation() {
    //get current location
    var geo_param;
    if(navigator.geolocation) {
      navigator.geolocation.getCurrentPosition(function(position) {
        // Create geolocation parameter
        geo_param = "geolocation=[" + position.coords.latitude + "," + position.coords.longitude + "]";
        console.log(geo_param)
      });
    }
    return geo_param
  }

  function search(activity) {
    var searchUrl = "/s?activity=" + activity + "&" + getLocation()
    window.location.href = searchUrl;
    console.info(searchUrl)
  }

getCurrentPosition作用域是异步的,因此在getCurrentPosition完成运行之前将返回
geo_param
。解决方法是使用回调,请参见下面的示例

函数getLocation(回调,活动){ //获取当前位置 var geo_param; if(导航器.地理位置){ navigator.geolocation.getCurrentPosition(函数(位置){ //创建地理位置参数 geo_param=“地理位置=[“+position.coords.latitude+”,“+position.coords.longitude+”; 控制台日志(地理参数); 回调(地理参数、活动); }); } } 功能搜索(活动){ getLocation(使用当前位置、活动搜索); } 具有当前位置的函数搜索(地理参数、活动){ var searchUrl=“/s?activity=“+activity+”&“+geo_param; window.location.href=searchUrl; console.info(searchUrl);
}在这种情况下,函数在获取响应之前执行。一旦从
API
获得响应,就需要一个回调函数

另请注意,重定向URL中没有查询字符串键
geo_param

试试这个:

function getLocation(cb) {
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(function (position) {
            var geo_param = "geolocation=[" + position.coords.latitude + "," + position.coords.longitude + "]";
            if (typeof cb === 'function') {
                cb(geo_param);
            }
        });
    }
}
function search(activity) {
    getLocation(function (geo_param) {
        window.location.href = "/s?activity=" + activity + "&" + geo_param;
    });
}

如果
getCurrentPosition
是异步的,您将得到未定义的返回。如果
getCurrentPosition
是异步的,那么函数将在调用getCurrentPosition中的回调之前返回geo_参数,谢谢您的回答。我有查询字符串键,但是,它被称为地理位置。所以它看起来像是“&geolocation=[lon,lat]”返回的方式是
&geo_param=geolocation=[lon,lat]
@Batman,哦,是的!我弄错了,但它确实很好用。非常感谢,我想我现在明白了。因此,为了保存异步函数的结果,我需要将它传递给另一个函数,并从那里使用它。是的,没错!对于
async
操作,因为函数是一级对象,我们可以将一个函数作为参数传递到另一个函数中,然后执行传入的函数,甚至返回给以后执行。啊,好吧,我明白了,有点困惑,但我理解。谢谢你的帮助