我试图从开放天气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
}
答案 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;
此外,您应该检查您的服务器是否有CORS
限制,请点击此处阅读:
http://enable-cors.org/server.html