我正在使用国家天气服务警报API,该API可根据位置提供天气警报。很整洁的东西。我想缩小信息范围,仅根据用户地理位置进行拉取,这是一个可行的选择,并通过输入html地址并以lat long结尾对其进行了手动测试。我试图通过获取其位置并将其添加到在提取行中返回和使用的字符串中来自动进行html构建过程。当我运行此命令时,控制台显示该地址缺少纬度。
在此之外,我没有做太多尝试,因为我真的不知道另一种方法。
函数loadAlerts(){
fetch(alertDataForUserLocation)
.then(response => response.json())
.then(data => {
console.log(data) // Prints result from `response.json()` in getRequest
})
.catch(error => console.error(error))
function alertDataForUserLocation() {
var lat = "";
var long = "";
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
} else {
alert("Geolocation needs to be enabled for this site.");
}
return "https://api.weather.gov/alerts/active?point=?" + lat + "," + long;
}
function showPosition(position) {
lat = position.coords.latitude;
long = position.coords.longitude;
}
我的逻辑告诉我,访存将调用函数alertDataForUserLocation(),该函数将提供正确的html地址,并在末尾加一个lat。这不是所显示的。以下是我得到的错误。
api.weather.gov/alerts/active?point =?,:1加载资源失败:服务器响应状态为400()
答案 0 :(得分:0)
首先在showPosition
内更新lat,而在alertDataForUserLocation
内更新lat,这不是JS范围定义的工作原理。
您将不得不重构您的代码。为了确保alertDataForUserLocation
返回正确的URL,请在showPosition
内移动return语句。您可以执行以下操作:
function alertDataForUserLocation() {
var lat = "";
var long = "";
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function showPosition(position){
lat = position.coords.latitude;
long = position.coords.longitude;
let url = "https://api.weather.gov/alerts/active?point=?" + lat + "," + long;
return url;
},(error)=>{console.log(error)});
} else {
alert("Geolocation needs to be enabled for this site.");
}
}
还要检查api端点是否正确。