Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.02.2015, 20:57
Новичок на форуме
Отправить личное сообщение для mikuskov Посмотреть профиль Найти все сообщения от mikuskov
 
Регистрация: 01.02.2015
Сообщений: 7

Как локальную переменную сделать глобальной.
Здравствуйте.
На форуме и где-то в интернете находил ответы на свой вопрос, но у моего скрипта есть специфика, для которой ответы не подходят, поэтому прошу помощи.

Есть скрипт, который обращается к json и получает точное время региона юзера, вне зависимости от того, что показывают его часы. А если точнее, я получаю текущий час:

<script type="text/javascript">
function getTime(zone, success)
{
var url = 'http://json-time.appspot.com/time.json?tz=' + zone,
ud = 'json' + (+new Date());
window[ud]= function(o){
success && success(new Date(o.datetime));
};
document.getElementsByTagName('head')[0].appendChild((function()
{
var s = document.createElement('script');
s.type = 'text/javascript';
s.src = url + '&callback=' + ud;
return s;
})());
}
getTime('GMT', function(time){
var tutu = time.getHours();
})

</script>



Переменная tutu является локальной, но мне её нужно сделать глобальной. Никак не получается. Подскажите, пожалуйста, я со скриптами вообще на "вы".
Ответить с цитированием
  #2 (permalink)  
Старый 01.02.2015, 21:02
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,124

Сообщение от mikuskov
Переменная tutu является локальной, но мне её нужно сделать глобальной. Никак не получается.
И не получится...
Если переменная уже объявлена в некой области видимости - это уже не изменить.
Но. Значение переменной можно присвоить еще кому-то...
Ответить с цитированием
  #3 (permalink)  
Старый 01.02.2015, 21:10
Новичок на форуме
Отправить личное сообщение для mikuskov Посмотреть профиль Найти все сообщения от mikuskov
 
Регистрация: 01.02.2015
Сообщений: 7

Можно заранее, до функций объявить переменную, можно и присваиванием другой переменной, любые варианты. Главное, получить time.getHours(); для "дальнейшего использования", уже вне функций - вот никак не удаётся, например, уже после этого скрипта, где-то далеко ниже в коде вывести document.write(tutu);
Ответить с цитированием
  #4 (permalink)  
Старый 01.02.2015, 21:25
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,124

mikuskov, пробуй так...

var tutu;
	function getTime(zone, success) { 
		var url = 'http://json-time.appspot.com/time.json?tz=' + zone, 
			ud = 'json' + (+new Date()); 
		window[ud]= function(o){ 
			success && success(new Date(o.datetime)); 
		}; 
		document.getElementsByTagName('head')[0].appendChild((function() { 
			var s = document.createElement('script'); 
			s.type = 'text/javascript'; 
			s.src = url + '&callback=' + ud;
			return s;
		})()); 
	} 
	getTime('GMT', function(time){ 
		tutu = time.getHours();
	});
	alert(tutu);
Ответить с цитированием
  #5 (permalink)  
Старый 01.02.2015, 22:20
Новичок на форуме
Отправить личное сообщение для mikuskov Посмотреть профиль Найти все сообщения от mikuskov
 
Регистрация: 01.02.2015
Сообщений: 7

Не получается:


<script type="text/javascript">
var tutu;
function getTime(zone, success)
{
var url = 'http://json-time.appspot.com/time.json?tz=' + zone,
ud = 'json' + (+new Date());
window[ud]= function(o){
success && success(new Date(o.datetime));
};
document.getElementsByTagName('head')[0].appendChild((function()
{
var s = document.createElement('script');
s.type = 'text/javascript';
s.src = url + '&callback=' + ud;
return s;
})());
}
getTime('GMT', function(time){
tutu = time.getHours();
})

</script>
</head>
<body>
<script type="text/javascript">alert(tutu);</script>
</body>



Это возвращает "undefined".
Ответить с цитированием
  #6 (permalink)  
Старый 01.02.2015, 22:28
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,127

добавь после "<script type="text/javascript">alert(tutu);</script>"
Строчку "<button onclick="alert(tutu)"> Алертить ТуТу</button>"

И попробуй догадаться почему в первов алерте tutu == undifined
а после нажатия на кнопку tutu != undifined
Ответить с цитированием
  #7 (permalink)  
Старый 01.02.2015, 22:35
Новичок на форуме
Отправить личное сообщение для mikuskov Посмотреть профиль Найти все сообщения от mikuskov
 
Регистрация: 01.02.2015
Сообщений: 7

Спасибо, но я понятия не имею, я не владею в должной мере скриптами. Мне нужно ниже в коде будет использовать <script type="text/javascript">if tutu == 22 {...
То есть, далее - переменную буду использовать внутри <script type="text/javascript"></script>, а это не работает!
Ответить с цитированием
  #8 (permalink)  
Старый 01.02.2015, 23:10
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,127

Твоя проблема в том что ты пытаешься использовать переменную до того как ей присвоено значение
а значение ей присваивается после определенных событий которые наступают в браузере (напремер загружен и выполнен скрипт который присваивает переменной значение).
Самое простое решение это выполнять свой код после наступления события (onload).
Тебе просто нужно разобраться какие скрипты(строчки кода) и после чего выполняются.
Ответить с цитированием
  #9 (permalink)  
Старый 02.02.2015, 01:28
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

mikuskov, MallSerg все правильно сказал, но если тебе нужно получить время только один раз, при загрузке страницы - то можешь для подключения скрипта использовать document.write() - тогда при его загрузке поток будет заблокирован.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #10 (permalink)  
Старый 02.02.2015, 08:11
Новичок на форуме
Отправить личное сообщение для mikuskov Посмотреть профиль Найти все сообщения от mikuskov
 
Регистрация: 01.02.2015
Сообщений: 7

Т.е. что-то нужно написать в <body onload=... ? Но что, можете подсказать? Как присвоить значение сразу, при загрузке документа?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
filter(this,this) как правильно сделать? Smip jQuery 5 23.02.2013 03:07
Как сделать что бы при регистрации человека на моем сайте у него не появлялось... drunkwolfs Общие вопросы Javascript 2 07.08.2012 10:58
Как сделать такую фичу? dotwatt Элементы интерфейса 7 20.07.2012 10:51
Как сделать локальную переменную глобальной?? Дмитрий Общие вопросы Javascript 8 02.11.2010 03:33
Как обозначить переменную выбранную в FileChooser? woo_hoo Общие вопросы Javascript 4 03.07.2008 12:58