javascript - 使用地理位置和天气 API 显示天气的问题

标签 javascript jquery api frontend

免责声明:
我编辑这篇文章是因为我从不支持 CORS 的 API 切换到另一个 API 后发生了另一个错误。

我目前正在尝试构建一个 app on codepen.io根据用户地理位置的数据显示本地天气。我正在使用this API provided by OpenWeatherMap 。编辑器没有显示任何语法错误,我也找不到任何语法错误,所以我假设我在 AJAX 请求中犯了一个逻辑错误。如果有人能告诉我哪里出了问题,我将不胜感激:

if (navigator.geolocation) {

  window.onload = function(){

    var currentPosition;
    function getCurrentLocation (position) {
      currentPosition = position;
      var lat = currentPosition.coords.latitude;
      var long = currentPosition.coords.longitude;

      $.getJSON('api.openweathermap.org/data/2.5/weather?lat=' + lat + '&lon=' + long + "&appid=81621bf2bb3e08f0bfd40540baafb8ee", function(data) {
      $('#info').append('<p>' + data.weather[0].description + '</p>');          
      });      
    };     
  };

  navigator.geolocation.getCurrentPosition(getCurrentLocation);
}
<div class="main">
  <div align="center" id="info"></div>
</div>

我只提供了我认为相关的代码,但如果您需要完整的代码,可以点击我上面包含的第一个链接。
感谢您的建议并提前抽出时间:)

最佳答案

这里有两个主要问题:

第一行是这一行:

$.window.onload

这段代码没有执行您期望的操作($.window 未定义),将其更改为 window.onload 应该可以解决该问题。

第二个问题更严重:您收到CORS(跨源资源共享)错误。 MetaWeather 似乎不允许跨源请求(源自某个域并请求来自不同域的数据的请求,例如 codepen.io --> metaweather.com)。

这通常可以通过 JSONP 回调(MetaWeather 也不支持)、代理您的请求(例如 Nginx)或设置您自己的后端 API(例如 Node.js)并通过该 API 进行调用来解决。

Here's a sample app tutorial它解决了一个与您尝试使用 OpenWeatherMap API 编写的项目非常相似的项目,该项目将允许您从浏览器执行 API 请求。

关于javascript - 使用地理位置和天气 API 显示天气的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48317477/

相关文章:

javascript - 访问回调参数到内部回调

jquery - 使用关闭按钮扩展 jQuery UI Accordion - 绑定(bind)事件处理程序

JAVA可以在linux平台调用.so文件吗?

javascript - 我应该在哪里调用 React Redux Meteor.js 混合物中的订阅

javascript - 动态图像加载

javascript - jQuery .each() 没有索引

javascript - iPhone 上的滚动 iframe 不起作用

java - Bing AdCenter API java 关键字报告 Campaignid

api - 使用 TensorFlow 的数据集 API 进行图像摘要

javascript - jeditable:使用选择时出现错误