2016-06-05 5 views
0

API URL을 가져 와서 변수를 제거하고 실제로 LAT 및 LONG 값을 브라우저에 삽입하면 작동합니다. 그러나 LAT 및 LONG 변수가있는 코드에서 사용되면 작동하지 않습니다.OpenWeatherMapAPI LAT LONG을 통한 Geolocation이 작동하지 않거나 인쇄되지 않습니다.

나는 성공적으로 LAT 및 LONG 값을 끌어와 인쇄되지 동일한 구문의 경우와 유사하여, 다음 변수를 저장하고있어 기존의 질문 herehere

언급했습니다. 변수를 API URL에 삽입하고 있지만 인쇄하지 않습니다. 나는 이유를 모른다.

감사합니다.

내 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> 

입니다 그리고 이것은/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을 통해 비동기 호출을하고 있기 때문에 내 JS, 당신은 형태의 콜백 함수를 사용할 필요가 "done"또는 사용자 정의 콜백 함수를 정의 할 수 있습니다. 예를 들어, 다음과 같이 비동기 호출의 콜백으로 "done"을 사용할 수 있습니다.

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

done으로 정의 된 함수는 AJAX 호출이 성공했을 때 실행됩니다.

+0

감사합니다. 비동기 호출에는 콜백 함수가 필요 없습니다. .getSSON? 동기식 대안이란 무엇입니까? .done 콜백 함수로 스 니펫을 추가했지만 여전히 값을 반환하지 않습니다. .done 콜백 함수의 데이터를 반환하는데 얼마나 걸리나요? – Stomper

+0

.done이 콜백입니다. UI가 차단되거나 응답하지 않기 때문에 동기식을 선택하는 것은 좋은 옵션이 아닙니다. 당신이 동기 대안을 요구하기 때문에하지만, 난 여기가 제공하고 있습니다 $ 아약스 ({ 유형 : "SOME_URL" 비동기 : : URL을 "GET"거짓 을}); "async"를 false로 설정하면 AJAX 호출이 동기화됩니다. codepen 링크를 공유 할 수 있습니까? 나는 당신을 도와 드리겠습니다. –

+0

또한 왜 "if"바깥에 lat 변수와 long 변수를 설정하고 있습니까? "if"조건 앞에 변수를 선언하고 조건 안에 변수를 설정하는 것이 좋습니다. 사용자가 Geolocation을 지원하지 않는 경우 사용자에게 알리기 위해 다른 경우가 있습니다. –