0

我正在使用可以根据位置提供天气警报的 National Weather Service Alert API。很整洁的东西。我想缩小信息范围,仅根据用户地理位置进行拉取,这是一个可行的选择,并通过输入 html 地址并以 lat long 结束手动测试。我试图通过获取它们的位置并将其添加到返回并在 fetch 行中使用的字符串来自动化 html 构建过程。当我运行它时,控制台显示地址缺少 lat long。

除此之外,我没有尝试太多,因为我真的不知道另一种方法可以做到这一点。

函数加载警报(){

  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;
  }

我的逻辑告诉我 fetch 将调用函数 alertDataForUserLocation() ,该函数将提供一个正确的 html 地址,最后有一个 lat long 。这不是显示的内容。以下是我得到的错误。

api.weather.gov/alerts/active?point=?,:1 加载资源失败:服务器响应状态为 400 ()

4

1 回答 1

0

首先更新 lat, long 在里面showPosition是没有办法更新 lat, long 在里面的alertDataForUserLocation这不是 JS 中作用域的工作方式。您将不得不稍微重构您的代码。为了确保alertDataForUserLocation返回正确的 URL,请将 return 语句移到showPosition. 你可以这样做:

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 端点是否正确。

于 2019-04-26T09:06:17.520 回答