Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Области видимости (https://javascript.ru/forum/jquery/32679-oblasti-vidimosti.html)

project1 25.10.2012 13:58

Области видимости
 
Здрасти) Функция должна возвращать результат ответа, который содержится в переменной data безымянной функции.

function aliasExists(alias, args) {
	var ret = '123';
	$.get('/cp/ajax/alias_exists.php',
		{'alias': alias, 'args': args},
		function(data, textStatus) {
            alert(ret) //выведет 123
			ret = data;
            alert(ret) //выведет содерщимое data
		}
	);
    alert(ret) //выведет 123
	return ret;
}

Skipp 25.10.2012 14:11

Ну так правильно callback сработает, только тогда, когда сервер ответит, а return функцией будет возвращён сразу.

Поставьте таймер и выведете ret и посмотрите, что он вам покажет.

project1 25.10.2012 14:21

function aliasExists(alias, args) {
	var ret = '123';
	$.get('/cp/ajax/alias_exists.php',
		{'alias': alias, 'args': args},
		function(data, textStatus) {
			ret = data;
		}
	);
	setTimeout('alert(ret)', 2000);
	return ret;
}

Спустя 2 секунды пишет в консоле ошибок файрбага ReferenceError: ret is not defined

Skipp 25.10.2012 14:28

Первый параметр у setTimeout и setInterval это функция или же строка, содержащая имя функции.

(function(){
	var ret = 1;
	setTimeout(function(){
		alert(ret);
	}, 1000);
	ret = 2;
})()

А теперь, что бы было более понятнее, тут выводиться два alert теперь запусти и быстро закрой первый alert, потом посмотри значение второго, запусти второй раз и перед тем как закрыть первый, подожди две секунды и посмотри результат.
(function(){
	var ret = 1;
	setTimeout(function(){
		alert("setTimeout: " + ret);
	}, 2000);
	alert("function: " + ret);
	ret = 2;
})()

BallsShaped 25.10.2012 14:31

БЛЕАТЬ!!! Сколько можно! Одни и те же грабли! Учи основы!!!
Цитата:

setTimeout('alert(ret)', 2000);
Так верстаютпрограммируют только мудаки! Строка выполняется в глобальном скопе!

project1 25.10.2012 14:33

Работает, спасибо)
А как мне лучше реализовать мою функцию?
Через таймаут возвращать значение? - Как-то неверно...

Skipp 25.10.2012 14:36

BallsShaped,
Я смотрю ты сразу кулхацкером родился?

Skipp 25.10.2012 14:37

project1,
Нет, подумай над логикой, помучившись вскоре поймёшь. Ты просто к решению задачи подходишь не с той стороны.

project1 25.10.2012 14:42

Skipp,
Просто я не до конца знаю всех особенностей javascript'a. Может попытаться сделать запрос синхронным? Тогда пока ответ не придёт, дальше ничего не выполнится. Но это тоже неверно как-то...
Можешь хотябы намекнуть на правильный подход? :)

BallsShaped 25.10.2012 14:43

Цитата:

Сообщение от Skipp
Я смотрю ты сразу кулхацкером родился?

Нет, я начала прочитал fuckin manual, а потом, когда возникали вопросы, пользовался поиском. И, о чудо!, не е**л мозги людям на форуме, задавая в тысячный раз одни и те же вопросы.


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