尝试从我将 lat & long 数据放入的 URL 中获取 JSON 时脚本不起作用

Posted

技术标签:

【中文标题】尝试从我将 lat & long 数据放入的 URL 中获取 JSON 时脚本不起作用【英文标题】:Script not working when trying to getJSON from URL that I put lat & long data into 【发布时间】:2018-04-11 20:51:46 【问题描述】:

如您所见here,当我尝试在获取的 URL 中使用变量“纬度”和“经度”(这些变量应该获取用户当前的纬度和经度)时,我的应用程序无法运行JSON 来自。

下面是我的代码

if (navigator.geolocation)

    navigator.geolocation.getCurrentPosition(function(position)        
        var latitude = position.coords.latitude
        var longitude = position.coords.longitude
    )


$.getJSON("https://fcc-weather-api.glitch.me/api/current?lat=" + latitude + "&lon=" + longitude, function(json)
  var temp = json.main.temp
  var ftemp = (temp * 1.8) + 32
  var celsius = true
  var condition = json.weather[0].main
  var video;
  switch (condition)
    
      case "Clouds":
        video = ""
        break;
      case "Rain":
        video = "https://gcs-vimeo.akamaized.net/exp=1523487613~acl=%2A%2F401800757.mp4%2A~hmac=d66772ad9d6530ff1af68ac1dc01fcf17db42cce48ff72eebf97cc2b34ec0dab/vimeo-prod-skyfire-std-us/01/2146/5/135733055/401800757.mp4"
        break;
      case "Sunny":
        video = ""
        break;        
        
  $("#myVideo").html("<source src='" + video + "' type='video/mp4'>")
  $("#condition").html(condition)
    $("#number").html(Math.round(temp) + "°C")
    $("#button").on("click", function(event)
    event.preventDefault()
    celsius = !celsius;
    if (celsius)
      
        $("#number").html(Math.round(temp) + "°C")
        $("#button").html("(Switch to °F)")
      
    else
      
        $("#number").html(Math.round(ftemp) + "°F")    
        $("#button").html("(Switch to °C)")
      
  )
  )

但是在我添加上面的“if 部分”之前,在我尝试将变量放入 URL 之前,应用程序运行良好,所以问题出在下面这几行中。

if (navigator.geolocation)

    navigator.geolocation.getCurrentPosition(function(position)        
        var latitude = position.coords.latitude
        var longitude = position.coords.longitude
    )


$.getJSON("https://fcc-weather-api.glitch.me/api/current?lat=" + latitude + "&lon=" + longitude, function(json)

【问题讨论】:

【参考方案1】:

您的变量超出范围:

if (navigator.geolocation)

    navigator.geolocation.getCurrentPosition(function(position)        
        var latitude = position.coords.latitude
        var longitude = position.coords.longitude
    )

您需要在该内部函数之外声明变量:

var latitude, longitude;
if (navigator.geolocation)

    navigator.geolocation.getCurrentPosition(function(position)        
        latitude = position.coords.latitude
        longitude = position.coords.longitude
    )

哦,你需要等到你得到坐标,所以你应该把你的getJSON调用包装在一个函数中,然后在你得到变量后调用它。

navigator.geolocation.getCurrentPosition(function(position)        
    latitude = position.coords.latitude
    longitude = position.coords.longitude
    doAjaxRequest();
)

【讨论】:

以上是关于尝试从我将 lat & long 数据放入的 URL 中获取 JSON 时脚本不起作用的主要内容,如果未能解决你的问题,请参考以下文章

快速将 PFGeoPoint Lat 和 Long 从 Parse 转换为 CLLocation Lat 和 Long

将 exif 数据映射到 long/lat

如何在 KML URL 上传递多个 Lat 和 Long?

如何将rails数据放入javascrip数组中

有啥方法可以从作为 LAT/LONG 作为 PostGIS 中的地理数据类型插入的 GPS 坐标中恢复数据?

计算 2 lat longs 之间的距离