Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.10.2014, 00:12
Новичок на форуме
Отправить личное сообщение для Stroganov Ilya Посмотреть профиль Найти все сообщения от Stroganov Ilya
 
Регистрация: 17.10.2014
Сообщений: 4

Видимость переменной при асинхронном запросе. Как передать и получить значение?
Не силен в Аяксе.
Понял что дело в callback, но как реализовать не знаю, подскажите.
Имеем код (подключена библиотека работы с Яндекс Картами)

var coordinats;
var myGeocoder = ymaps.geocode("Москва");

myGeocoder.then(
    function (res) {
        coordinats = res.geoObjects.get(0).geometry.getCoordinates();
        alert('Координаты объекта :' + coordinats); // здесь всё верно, на экран получаю координату
    }  
);

// Как за пределами фунцции получить доступ к переменной coordinats ?
// Чтобы вызвать так?

alert('И тут Координаты объекта :' + coordinats);


Спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 17.10.2014, 00:27
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Вас где штампуют ))
Не совру, если скажу что твой вопрос при мне задается где-то 15й раз
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 17.10.2014, 00:28
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Чувак, запрос на сервер занимает некоторое время.
Гугли метод, который обращается в будущее и вытягивает оттуда значение переменной.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #4 (permalink)  
Старый 17.10.2014, 00:30
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Это как отправить ребенка за молоком, поймать его на пороге, когда он только собрался выйти, и трясти, требуя молоко ))
Ну а че. За молоком отправил? Отправил. Где молоко? Не успел еще сходить? А не волнует ))
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #5 (permalink)  
Старый 17.10.2014, 00:41
Новичок на форуме
Отправить личное сообщение для Stroganov Ilya Посмотреть профиль Найти все сообщения от Stroganov Ilya
 
Регистрация: 17.10.2014
Сообщений: 4

Сообщение от danik.js Посмотреть сообщение
Чувак, запрос на сервер занимает некоторое время.
Гугли метод, который обращается в будущее и вытягивает оттуда значение переменной.
Чувак, я тебя понял. И примерно понимаю что искать. И что ответ многим очевиден.
Но тыкни пальцем где есть ответ, коли такой шустрый. Дай ссылку, а лучше поправь код. Я искал, честно!
Ответить с цитированием
  #6 (permalink)  
Старый 17.10.2014, 00:50
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Я же объяснил - два эти участка кода разнесены по времени.
Ты хотя бы на порядок всплытия алертов обрати внимание. А ведь тот алерт, который работает, всплывает сразу как только у тебя стали известны координаты, то есть до этого момента нет никаких координат.

Вывод - юзай координаты именно в том месте. Если вопрос в организации кода, то пожалуйста: вынеси код в отдельную функцию, но вызывай ее именно из then(), в callback-функции.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #7 (permalink)  
Старый 17.10.2014, 16:42
Новичок на форуме
Отправить личное сообщение для Stroganov Ilya Посмотреть профиль Найти все сообщения от Stroganov Ilya
 
Регистрация: 17.10.2014
Сообщений: 4

Скорректировал код.
Но всё равно не так как надо. Прошу помочь.

var coords;
var x;
var y;

function init(callback) {   
 
var myGeocoder = ymaps.geocode(city);
myGeocoder.then(
    function (res) {
        coords = res.geoObjects.get(0).geometry.getCoordinates();
        x = coords[0]; // это значение x надо передать дальше
        y = coords[1]; // это значение y надо передать дальше
		
		// Метка 1.
		alert("Коорд х = " + x + "Коорд y = " + y); //  <-- тут сейчас получаем верные желаемые значения
        callback(x,y);
    }
    
);

	// Метка 2.
   x = "59.76";
   y = "30.64";
} 


ymaps.ready(function () {
	
	init(function() {
		alert("Коорд х = " + x + "Коорд y = " + y); //  <-- тут сейчас ТАКЖЕ получаем верные желаемые значения из Метки 1
	});

    var myMap = window.map = new ymaps.Map('YMapsID', {
            center: [x,y], // <- сюда надо передать наши значения x и y из Метки 1. Но мы получаем значения из Метки 2. Что исправить?
            zoom: 9,
            behaviors: ['default', 'scrollZoom']
        });

});
Ответить с цитированием
  #8 (permalink)  
Старый 17.10.2014, 17:18
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

И опять ты пытаешься использовать значения, которые еще не успел получить. Ты можешь использовать только те значения, которые у тебя есть на данный момент. Если ты не можешь создать ymaps.Map не получив какие-то значения, то ... гм.. ты не можешь создать ymaps.Map не получив их. Странно, получилась очевидная закономерность. Только почему она не очевидна тебе?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #9 (permalink)  
Старый 17.10.2014, 17:19
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Ты понимаешь термин "асинхронный"?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #10 (permalink)  
Старый 17.10.2014, 17:22
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Stroganov Ilya
<-- тут сейчас ТАКЖЕ получаем верные желаемые значения из Метки 1
Ну неужели надо много ума, чтобы переместить в это место свой new ymaps.Map() ?
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать значение параметра в скрипт через переменную. Ellis Javascript под браузер 5 29.10.2015 13:08
Как передать значение переменной с ява на php wadim Общие вопросы Javascript 1 06.02.2014 00:19
Как передать значение по ссылке на другую страницу сайта Rollo Общие вопросы Javascript 7 18.10.2010 15:02
Как в ajax запросе передать файл методом POST mcpro jQuery 1 16.12.2009 11:41