Я пытаюсь использовать axios для получения данных из openweathermap, в настоящее время я создаю URL-адрес, используя несколько методов для получения широты и долготы из браузера пользователя, а затем вызываю функцию, которая создает URL-адрес.
URL-адрес построен правильно и без каких-либо проблем, но когда я пытаюсь вызвать API с помощью Axios, происходит странная вещь (в основном, я получаю HTML-код моей собственной страницы возвращается мне)
Вот код:
let weather = new Vue ({
el: '#weather',
data: {
error: '',
apiUrl: '',
city: '',
country: '',
icon: '',
description: '',
results: [],
},
methods: {
getPosition: function() {
if (navigator.geolocation){
navigator.geolocation.getCurrentPosition(this.getUrl);
}else{
this.error = 'Geolocation is not supported.';
}
},
getUrl: function(position){
let lat = position.coords.latitude;
let lon = position.coords.longitude;
this.apiUrl = buildWeatherUrl(lat, lon);
},
getWeather: function(){
axios.get(this.apiUrl).then(function (response) {
this.city = response.data.name;
this.results = response.data;
}).catch( error => { console.log(error); });
}
},
beforeMount() {
this.getPosition();
},
mounted() {
this.getWeather();
}
});
Это мой первый раз, когда я использую Vue и axios, поэтому я не уверен, что я делаю здесь неправильно. Я также попытался добавить let self = this;
и заменить все this
на self
в функции getWeather
, но это не сработало.
Проблема в том, что я пытаюсь получить URL-адрес из apiUrl
, который должен обновляться методом getUrl
. Хотя, когда getWeather
запускается после монтирования, URL-адрес не обновляется (если он жестко запрограммирован, он работает нормально).
Спасибо за помощь.