我正在尝试将我从api获取的天气数据存储到全局变量中,但是却未定义。 我做错了什么? 以下是我的代码。
var Data ;
var GetData = function(){
this.findLocation = function(position)
{
this.latitude = position.coords.latitude.toFixed(2);
this.longitude = position.coords.longitude.toFixed(2);
this.getWeatherData = function(lat,lon){
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://api.openweathermap.org/data/2.5/weather?lat="+lat+"&lon="+lon+"&units=metric&APPID=2048abd4ff09cb4aa1f62dc9a077ba6", false);
xhr.send();
var data = xhr.response;
return this.wData = JSON.parse(data);
};
Data = this.getWeatherData(this.latitude,this.longitude);
};
navigator.geolocation.getCurrentPosition(this.findLocation);
};
GetData();
console.log(Data);
答案 0 :(得分:0)
您的代码中有几个问题,ANMo ......
首先,您不应该使用同步请求来调用外部API。在开发人员文档(MDN)中了解Mozilla对此做法的看法:
从Gecko 30.0开始(Firefox 30.0 / Thunderbird 30.0 / SeaMonkey 2.27),主线程上的同步请求已经完成 由于对用户体验的负面影响而弃用。
您绝对应该重构代码以使其异步。这就是Ajax的工作原理......
在JavaScript中使用全局变量是一个糟糕的主意。您应该尽可能保持全局范围的清洁,以避免意外冲突。
在您的代码中,您尝试使用构造函数,但将其称为基本函数。如果要从构造函数创建实例,则必须使用WorkDayUsageBlock = [HourlyUsageBlock.copy() for x in range(12)]
关键字。