01.02.2015, 20:57
|
Новичок на форуме
|
|
Регистрация: 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 является локальной, но мне её нужно сделать глобальной. Никак не получается. Подскажите, пожалуйста, я со скриптами вообще на "вы".
|
|
01.02.2015, 21:02
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,228
|
|
Сообщение от mikuskov
|
Переменная tutu является локальной, но мне её нужно сделать глобальной. Никак не получается.
|
И не получится...
Если переменная уже объявлена в некой области видимости - это уже не изменить.
Но. Значение переменной можно присвоить еще кому-то...
|
|
01.02.2015, 21:10
|
Новичок на форуме
|
|
Регистрация: 01.02.2015
Сообщений: 7
|
|
Можно заранее, до функций объявить переменную, можно и присваиванием другой переменной, любые варианты. Главное, получить time.getHours(); для "дальнейшего использования", уже вне функций - вот никак не удаётся, например, уже после этого скрипта, где-то далеко ниже в коде вывести document.write(tutu);
|
|
01.02.2015, 21:25
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,228
|
|
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);
|
|
01.02.2015, 22:20
|
Новичок на форуме
|
|
Регистрация: 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".
|
|
01.02.2015, 22:28
|
|
Профессор
|
|
Регистрация: 07.03.2011
Сообщений: 1,138
|
|
добавь после "<script type="text/javascript">alert(tutu);</script>"
Строчку "<button onclick="alert(tutu)"> Алертить ТуТу</button>"
И попробуй догадаться почему в первов алерте tutu == undifined
а после нажатия на кнопку tutu != undifined
|
|
01.02.2015, 22:35
|
Новичок на форуме
|
|
Регистрация: 01.02.2015
Сообщений: 7
|
|
Спасибо, но я понятия не имею, я не владею в должной мере скриптами. Мне нужно ниже в коде будет использовать <script type="text/javascript">if tutu == 22 {...
То есть, далее - переменную буду использовать внутри <script type="text/javascript"></script>, а это не работает!
|
|
01.02.2015, 23:10
|
|
Профессор
|
|
Регистрация: 07.03.2011
Сообщений: 1,138
|
|
Твоя проблема в том что ты пытаешься использовать переменную до того как ей присвоено значение
а значение ей присваивается после определенных событий которые наступают в браузере (напремер загружен и выполнен скрипт который присваивает переменной значение).
Самое простое решение это выполнять свой код после наступления события (onload).
Тебе просто нужно разобраться какие скрипты(строчки кода) и после чего выполняются.
|
|
02.02.2015, 01:28
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
mikuskov, MallSerg все правильно сказал, но если тебе нужно получить время только один раз, при загрузке страницы - то можешь для подключения скрипта использовать document.write() - тогда при его загрузке поток будет заблокирован.
__________________
В личку только с интересными предложениями
|
|
02.02.2015, 08:11
|
Новичок на форуме
|
|
Регистрация: 01.02.2015
Сообщений: 7
|
|
Т.е. что-то нужно написать в <body onload=... ? Но что, можете подсказать? Как присвоить значение сразу, при загрузке документа?
|
|
|
|