尝试从 API 检索数据时未定义经度
Posted
技术标签:
【中文标题】尝试从 API 检索数据时未定义经度【英文标题】:Longitude Undefined while trying to retrieve a data from an API 【发布时间】:2017-09-28 20:23:08 【问题描述】:我正在尝试使用 FCC 项目中的 javascript 制作一个天气显示应用程序。为了首先显示当前天气,我必须找到设备的位置。使用 html 地理位置可以正常工作。但是当我尝试在函数外部使用它时,纬度和经度给了我undefined
错误,即使我试图将它分配给全局变量。
$(document).ready(function()
var lon;
var lat;
function getLocation()
if(navigator.geolocation)
navigator.geolocation.getCurrentPosition(showPosition);
else
console.log("your device is not suported!");
function showPosition(position)
var pos = position.coords
lat = pos.latitude;
lon = pos.longitude;
console.log(lat); // for debugging, here is the undefined error
$.ajax(
type: 'GET',
url: 'https://fcc-weather-api.glitch.me/api/current?lat=35&lon=139',
success: function(data)
$('h1').html( "<strong>" + data.coord.lat + "</strong>" );
console.log(latitude);
,
error: function(error)
console.log(error);
);
);
感谢您的帮助:)
【问题讨论】:
您的代码中有一个未定义的“纬度”。请参阅 Ajax 的成功函数中的console.log(latitude);
。也许将其更改为data.coord.lat
(如上一行)。
检查这个:***.com/questions/9935059/…
【参考方案1】:
由于浏览器需要获得用户的批准,因此获取位置是异步的。因此,当这种情况发生时,您需要调用您的 Web 服务。
$(document).ready(function()
var lon;
var lat;
function getLocation()
if(navigator.geolocation)
navigator.geolocation.getCurrentPosition(showPosition);
else
console.log("your device is not suported!");
function showPosition(position)
var pos = position.coords
lat = pos.latitude;
lon = pos.longitude;
console.log(lat); // should not be undefined anymore.
$.ajax(
type: 'GET',
url: 'https://fcc-weather-api.glitch.me/api/current?lat=' + lat + '&lon=' + lon,
success: function(data)
$('h1').html( "<strong>" + data.coord.lat + "</strong>" );
console.log(latitude);
,
error: function(error)
console.log(error);
);
);
【讨论】:
【参考方案2】:好吧,你只需声明 showPosition 和 getLocation 。
你不会真的像 showPosition()
这样称呼它们,所以 lat 和 lon 保持未定义
【讨论】:
以上是关于尝试从 API 检索数据时未定义经度的主要内容,如果未能解决你的问题,请参考以下文章
反序列化 Web.API 参数时未调用自定义 Json.NET JsonConverter
ABPersonViewController 在推送到 PeoplePickerNavigationController 时未检索数据