Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Видимость переменных родителя из потомка (https://javascript.ru/forum/misc/21331-vidimost-peremennykh-roditelya-iz-potomka.html)

huston007 05.09.2011 18:13

Видимость переменных родителя из потомка
 
Имеется функция для сокращения URL, создающая потомок, загружающая туда скрипт и обрабатывающая ответ от сервера, насколько я понимаю. Проблема в том, что я не могу вернуть сокращённый URL из коллбэк функции my_callback. Как сделать, чтобы функция shortURL возвращала сокращённый URL, получаемый функцией my_callback?

function shortURL(url)
	{
	var shorted="none";
	  window.my_callback = function(response)
	  {
		if(response.error_message)
		{
		  console.info("An error occured: " + response.error_message);
		}
		else
		{
		  shorted = response.short_url;
		  console.info(shorted); //здесь выведет сокращенную ссылку
		}
	  };
	  var s = document.createElement("script");
	  s.setAttribute("src", "http://ggl-shortener.appspot.com/?url=" +   encodeURIComponent(url) + "&jsonp=my_callback");
	  document.body.appendChild(s); 
		
	  console.info(shorted); //здесь выведет "none"
	}

Скрипт взят отсюда http://ggl-shortener.appspot.com/instructions/

Snipe 05.09.2011 18:18

Эм. Если я правильно понимаю, у вас тут асинхронность. return в shortURL не прокатит, потому что window.my_callback выполняется после создания и загрузки скрипта, т.е. shortURL к тому времени уже завершит свое выполнение.
Вам callback'и помогут...

huston007 05.09.2011 18:25

Цитата:

Сообщение от Snipe (Сообщение 124991)
Эм. Если я правильно понимаю, у вас тут асинхронность. return в shortURL не прокатит, потому что window.my_callback выполняется после создания и загрузки скрипта, т.е. shortURL к тому времени уже завершит свое выполнение.
Вам callback'и помогут...

Да, тут асинхронность. Но куда конкретно ткнуть ещё один callback?

walik 05.09.2011 18:39

Так в callback'е и делайте то что вам нужно с ссылкой. На то он и callback что бы обработать ответ.

huston007 05.09.2011 18:49

Цитата:

Сообщение от walik (Сообщение 124994)
Так в callback'е и делайте то что вам нужно с ссылкой. На то он и callback что бы обработать ответ.

Пришло прозрение) Строка 20 отрабатывает раньше строки 13. Спасибо)


Часовой пояс GMT +3, время: 08:01.