Как передать координаты из функции в переменную, а затем добавить их вне функции в другую переменную

edit1: удалил var из lan и lon в функции showPosition.

Я пытаюсь получить координаты моего текущего местоположения. Получите эти координаты и передайте их через функцию. После передачи координат я хочу сохранить их в переменных lan и lon. Используйте эти координаты, чтобы добавить их в переменную URL. Оттуда я хочу использовать эту переменную URL для анализа и использовать JSON для поиска имени, города и т. д.

HTML:

  <p>Click the button to get your coordinates.</p>

  <button onclick="getLocation()">Try It</button>
  <p id="geoLocal"></p>

JavaScript:

 var lon, lan;
 var geoLocal = document.getElementById("geoLocal");

 //First part, I am creating the function to get the coordinates. 
 function getLocation() {
 if (navigator.geolocation) {
     navigator.geolocation.getCurrentPosition(showPosition);
 } else {
     geoLocal.innerHTML = "Geolocation is not supported by this browser.";
  }
};
 //The first lines of code outputs the function and tells me the coordinates. 
 //As it tells me these coordinates I want to save them to **lan** **and** lon variables. 

 function showPosition(position) {
 geoLocal.innerHTML = "Latitude: " + position.coords.latitude +
 "<br>Longitude: " + position.coords.longitude;
 lan= position.coords.latitude;
 lon= position.coords.longitude;
 console.log(lan, lon);
 return (lan, lon);

 };

Выше я хотел бы, чтобы он возвращал координаты переменных lan и lon, чтобы я мог добавить их к URL-адресу ниже:

Я хочу добавить lan и lon и добавить их в конец wUndergroundGeo ниже. Прямо сейчас добавляются координаты, но по существу URL/переменная будет

 var baseURL="http://api.wunderground.com/api/8a8af55ae16c8627/geolookup/q/"
 var addLanLon= baseURL+ lan + "," + lon; 
 var wUndergroundGeo=addLanLon;

wUndergroundGeo заменит ту же самую переменную ниже.

 var wUndergroundGeo='http://api.wunderground.com/api/8a8af55ae16c8627/geolookup/q/34.4278,-119.7034111.json';
 var wUndergroundSF= 'http://api.wunderground.com/api/8a8af55ae16c8627/conditions/q/CA/San_Francisco.json'
 var weather= new XMLHttpRequest();
 weather.open("GET",wUndergroundGeo, false);
 weather.send(null);

 var myRequest= JSON.parse(weather.response);
 var cityLocal= "City location: "+ myRequest.location.city + "<br/>";
 document.getElementById("weather").innerHTML= cityLocal

person Roger Perez    schedule 17.12.2017    source источник
comment
что ты уже испробовал? когда ты собираешься вызывать апи?   -  person Marcelo Origoni    schedule 17.12.2017
comment
На первый взгляд, вы затеняете свои глобальные переменные, повторно объявляя их в своей функции showPosition.   -  person Carl Edwards    schedule 17.12.2017
comment
Результат, который я ищу, - это получить координаты и сохранить их в переменных, которые я могу использовать позже @CarlEdwards.   -  person Roger Perez    schedule 17.12.2017
comment
@MarceloOrigoni Я считаю, что могу передать это в API, я просто застрял в сохранении координат долготы и широты.   -  person Roger Perez    schedule 17.12.2017
comment
Измените var lan и var lon всего на lan и lon в вашей функции showPosition. Закрытие Javascript должно помочь вам.   -  person RaphaMex    schedule 17.12.2017
comment
Переопределяя lan и lon в вашей функции showPosition, вы затеняете глобальные переменные, объявленные изначально. Попробуйте удалить ключевое слово var из переменных в функции. Затем после вызова функции значения должны быть доступны из этих переменных.   -  person JoshG    schedule 17.12.2017
comment
Я уверен, что вы можете получить это через API @GauchoRoger, но я не экстрасенс, и я не знаю, как вы планируете передать lan и lon API. return (lan, lon); не вернет массив, если вы этого ожидаете, return [lan, lon]; вернет. Удачи в поиске решения.   -  person Marcelo Origoni    schedule 17.12.2017
comment
Обновил var для lan и lon и console.log после выхода за пределы функции, и я получаю недооценку.   -  person Roger Perez    schedule 17.12.2017
comment
@MarceloOrigoni Я буду добавлять координаты в локальной сети к URL-адресу, чтобы API был завершен.   -  person Roger Perez    schedule 17.12.2017
comment
извините, если мой вопрос беспокоит вас, я просто пытаюсь понять, что вы хотите сделать и как вы хотите это сделать, и я до сих пор не понимаю, собираетесь ли вы объявить новую функцию, чтобы создать URL-адрес внутри функция showPosition или то, что вы ожидаете. Удаление var из переменных в функции приведет к тому, что javascript присвоит значение глобальным переменным. Возврат не сработает, и я не вижу вызова функции.   -  person Marcelo Origoni    schedule 17.12.2017


Ответы (1)


Удалось заставить работать. Я переместил остальные строки кода внутрь функции show position.

 var lon, lan;
   var example='http://api.wunderground.com/api/8a8af55ae16c8627/geolookup/q/34.4277882,-119.7034209.json'; //Examples of completed coordinates
 var exampleCity="http://api.wunderground.com/api/8a8af55ae16c8627/conditions/q/CA/Santa_Barbara.json"; //example City.
 var geoLocal = document.getElementById("geoLocal");
 var temp= document.getElementById("temp");
 $(document).ready(function(){

 if (navigator.geolocation) {
  navigator.geolocation.getCurrentPosition(showPosition);
 } else {
  geoLocal.innerHTML = "Geolocation is not supported by this browser.";
}
function showPosition(position) {
var beforeURL= 'http://api.wunderground.com/api/8a8af55ae16c8627/';
var conditionsURL="conditions/q/";
var geoLookUp="geolookup/q/"
var endURL=".json";
geoLocal.innerHTML = "Latitude: " + position.coords.latitude +
"<br>Longitude: " + position.coords.longitude;
lan= position.coords.latitude;
lon= position.coords.longitude;
wUndergroundGeo=beforeURL + geoLookUp+ lan + "," + lon + endURL;
// return (position);

`

 var wUndergroundSF= 'http://api.wunderground.com/api/8a8af55ae16c8627/conditions/q/CA/San_Francisco.json'
 // var wUndergroundGeo= 'http://api.wunderground.com/api/8a8af55ae16c8627/geolookup/q/34.4278,-119.7034111.json';
 var weather= new XMLHttpRequest();
 weather.open("GET",wUndergroundGeo, false);
 weather.send(null);

 var myRequest= JSON.parse(weather.response);
 var cityLocal= "City location: "+ myRequest.location.city + "<br/>";
 document.getElementById("weather").innerHTML= cityLocal
 var stateURL= myRequest.location.state + "/";

 var cityURL=myRequest.location.city ;
 var cityURL=cityURL.replace(/ /gi,"_");//Replaces spaces of city with "_" so url will be valid.


 var weatherURL= beforeURL + conditionsURL +stateURL + cityURL + endURL;
 console.log("Weather", weatherURL)

 var weather2= new XMLHttpRequest();
 weather2.open("GET", weatherURL, false);
 weather2.send(null);

 var secRequest=JSON.parse(weather2.response);
 var fTemp= "Fahrenheit: " + secRequest.current_observation.temp_f;
 console.log(fTemp);

temp.innerHTML=fTemp; возврат fTemp;

person Roger Perez    schedule 18.12.2017