非常简单的API调用,不会返回任何内容

时间:2016-09-15 15:40:58

标签: javascript api

我试图从开放天气API获取数据,但我得到的是一个我无法使用的对象(JSON在里面但我无法访问它)

我已经阅读了很多关于异步JS和回调的内容。我真的不确定我是否需要使用EACH API的回调,我已经用一个来获取经度和经度但是现在,对于开放天气API,我需要通过这些lat和lon作为API调用的参数,如果我使用回调,我不知道如何做到这一点(因为看起来回调函数中的参数不是函数中使用的参数,而是实际返回的参数,我觉得非常混乱)。

谁能告诉我我在这里做错了什么?

$(document).ready(function() {
  $('#getWeather').on('click', function(){
    myLatAndLon(function(result) {
      var lat = result[0];
      var lon = result[1];
      console.log(myWeather(lat, lon));
      // Here, although the params work in browser, the message that gets returned in console is : "NS_ERROR_DOM_BAD_URI: Access to restricted URI denied"
    });
  })
})

function myLatAndLon(callback) {
  $.getJSON('http://ip-api.com/json/').done( function(location) {
    var arr = [];
    arr.push(location.lat);
    arr.push(location.lon);
    callback(arr);
  });
}

function myWeather(lat, lon) {
  return $.getJSON('http://api.openweathermap.org/data/2.5/weather', {
      lat: lat,
      lon: lon,
      APPID: 'a9c241803382387694efa243346ec4d7'
  })
  // The params are good, and when I type them on my browser, everything works fine
}

EDIT : I'm adding a picture to make it clearer what I'm trying to do and what I get eventually

1 个答案:

答案 0 :(得分:1)

将代码更改为它并再次测试:



$(document).ready(function() {
  $('#get').on('click', function() {
    myLatAndLon(function(result) {
      var lat = result[0];
      var lon = result[1];
      alert(JSON.stringify(result));
      $req = myWeather(lat, lon);
      $req.done(function(R) {
        alert(JSON.stringify(R))
      });
    });
  })
})

function myLatAndLon(callback) {
  $.getJSON('//ip-api.com/json/').done(function(location) {
    var arr = [];
    arr.push(location.lat);
    arr.push(location.lon);
    callback(arr);
  });
}

function myWeather(lat, lon) {
  return $.getJSON('//api.openweathermap.org/data/2.5/weather', {
    lat: lat,
    lon: lon,
    APPID: 'a9c241803382387694efa243346ec4d7'
  })
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="get">get</button>
&#13;
&#13;
&#13;

此外,您应该检查您的服务器是否有CORS限制,请点击此处阅读: http://enable-cors.org/server.html