如何使用JavaScript从url获取JSON数据。我尝试了以下但它没有给出json数据。
var GetLocation = function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
}
else {
alert("Geolocation is not supported by this browser.");
}
}
function showPosition(position, http) {
var lat = position.coords.latitude;
var lon = position.coords.longitude;
var app_id = '6784429f5eff661309aaa5280a143f97';
var api = "http://api.openweathermap.org/data/2.5";
var weather_api = api +"/weather?appid="+app_id+"&lat="+lat+"&lon="+lon+"&units=metric";
// console.log(weather_api);
var a = http.get(weather_api).then(function(response){
position.jsonList=response.data;
});
console.log(a);
}
当打印weather_api时,它会提供完整的网址,但我仍然不知道如何从该网址获取json数据。
答案 0 :(得分:0)
有几件事:
#1
请参阅this了解异步呼叫流程。然后在JavaScript中了解Promises。
#2
您正在使用的教程是使用Angular.js,它具有内置的$http
模块,其中包含get
方法。在你的情况下,看起来,你没有使用Angular.js&另外,showPosition
调用navigator.geolocation.getCurrentPosition
函数,因此在调用http
函数时不会传递showPosition
模块。
我使用jQuery
库添加了一个简单的http模块。因此,要使此代码有效,您必须在html文件中包含jQuery
。在任何情况下,以下代码都必须让您了解有关创建对象的信息。 JavaScript中的方法和如果你想要一些其他的HTTP请求库,你必须能够替换jQuery。
var http = {
get: function(url) {
return new Promise(function(resolve, reject) {
$.get(url, resolve).fail(reject);
})
}
};
var GetLocation = function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
}
else {
alert("Geolocation is not supported by this browser.");
}
}
function showPosition(position) {
var lat = position.coords.latitude;
var lon = position.coords.longitude;
var app_id = '6784429f5eff661309aaa5280a143f97';
var api = "http://api.openweathermap.org/data/2.5";
var weather_api = api +"/weather?appid="+app_id+"&lat="+lat+"&lon="+lon+"&units=metric";
// console.log(weather_api);
var a = http.get(weather_api).then(function(response){
position.jsonList=response;
console.log(position.jsonList);
});
}
注意:请注意,我已将console.log
移到了promise处理程序中。