2016-06-05 4 views
0

Я использую URL-адрес API и удаляю переменные и вставляю в действительности значения LAT и LONG в браузере, и он работает. Но когда он используется в коде с переменными LAT и LONG, он не работает.OpenWeatherMapAPI Geolocation через LAT LONG не работает или не печатается

Я называю существующие вопросы here и here

Я использую же, если не идентичен синтаксис успешно тянуть и распечатать LAT и LONG значения, а затем хранить переменные. Я вставляю переменные в URL-адрес API, но не печатает. Я не знаю почему.

Спасибо!

Это мой HTML

<html> 
    <head> 
     <meta charset="UTF-8"> 
     <title>Today's Weather | Malvin</title> 
    </head> 

    <body> 

    <p id="geoLoc"></p>  

    <p id="currTemp"></p> 

    </body> 
</html> 

И это мой JS/JQuery

//geolocation via freecodecamp exercise 
$(document).ready(function(){ 
if (navigator.geolocation){ 
    navigator.geolocation.getCurrentPosition(function(position){ 
     $("#geoLoc").html("latitude: " + position.coords.latitude + "<br>longitude: " + position.coords.longitude); 
    }); 
} 

//jquery current weather via openweathermapp 
var lat = position.coords.latitude; 
var long = position.coords.longitude; 
var weatherURL = "http://api.openweathermap.org/data/2.5/weather?lat="+lat+"&lon="+long+"&APPID=********f4144190680fc96bd357451d"; 
$.getJSON(weatherURL, function(data) 
    { 
    $('#currTemp').html("current temp: " + data.main.temp); 
    }); 
}); 

ответ

1

Поскольку вы делаете асинхронный вызов через .getJSON, вам нужно использовать функцию обратного вызова в виде «done» или вы можете определить свою собственную функцию обратного вызова. Например: вы можете использовать «done» в качестве обратного вызова вашего асинхронного вызова, как показано ниже.

$.getJSON(weatherURL).done(function(data){ 
    $('#currTemp').html("current temp: " + data.main.temp); 
}); 

Функция, определенная done, будет выполнена, когда ваш вызов AJAX будет успешным.

+0

Thanks Функция обратного вызова не требуется для асинхронного вызова, т.е. .getJSON? Что такое синхронная альтернатива? Я добавил ваш фрагмент с функцией обратного вызова .done, но он все равно не возвращает значение. Сколько времени требуется для возврата данных из функции обратного вызова .done? – Stomper

+0

.done - ваш обратный вызов. Синхронный выбор не является хорошим выбором, поскольку пользовательский интерфейс будет заблокирован/не реагировать. Но, так как вы просили синхронной альтернативы, я обеспечиваю его здесь $ .ajax ({ типа: "GET", URL: "some_url", асинхр: ложные }); Настройка «асинхронный» на false делает синхронный вызов AJAX. Можете ли вы поделиться ссылкой на код? Я рад помочь вам отладить –

+0

Кроме того, почему вы устанавливаете свои lat и длинные переменные за пределами «if»? Я предлагаю вам объявить переменные перед условием «if» и установить переменные внутри условия. Имейте случай else, чтобы сообщить пользователю, если геолокация не поддерживается пользователем. –