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
操作,因为函数是一级对象,我们可以将一个函数作为参数传递到另一个函数中,然后执行传入的函数,甚至返回给以后执行。啊,好吧,我明白了,有点困惑,但我理解。谢谢你的帮助