Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.10.2012, 13:58
Интересующийся
Отправить личное сообщение для project1 Посмотреть профиль Найти все сообщения от project1
 
Регистрация: 06.10.2011
Сообщений: 24

Области видимости
Здрасти) Функция должна возвращать результат ответа, который содержится в переменной 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;
}

Последний раз редактировалось project1, 25.10.2012 в 14:01.
Ответить с цитированием
  #2 (permalink)  
Старый 25.10.2012, 14:11
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

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

Поставьте таймер и выведете ret и посмотрите, что он вам покажет.
__________________
.
Ответить с цитированием
  #3 (permalink)  
Старый 25.10.2012, 14:21
Интересующийся
Отправить личное сообщение для project1 Посмотреть профиль Найти все сообщения от project1
 
Регистрация: 06.10.2011
Сообщений: 24

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
Ответить с цитированием
  #4 (permalink)  
Старый 25.10.2012, 14:28
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

Первый параметр у 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;
})()
__________________
.

Последний раз редактировалось Skipp, 25.10.2012 в 14:34.
Ответить с цитированием
  #5 (permalink)  
Старый 25.10.2012, 14:31
Профессор
Отправить личное сообщение для BallsShaped Посмотреть профиль Найти все сообщения от BallsShaped
 
Регистрация: 14.09.2012
Сообщений: 162

БЛЕАТЬ!!! Сколько можно! Одни и те же грабли! Учи основы!!!
Цитата:
setTimeout('alert(ret)', 2000);
Так верстаютпрограммируют только мудаки! Строка выполняется в глобальном скопе!
Ответить с цитированием
  #6 (permalink)  
Старый 25.10.2012, 14:33
Интересующийся
Отправить личное сообщение для project1 Посмотреть профиль Найти все сообщения от project1
 
Регистрация: 06.10.2011
Сообщений: 24

Работает, спасибо)
А как мне лучше реализовать мою функцию?
Через таймаут возвращать значение? - Как-то неверно...
Ответить с цитированием
  #7 (permalink)  
Старый 25.10.2012, 14:36
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

BallsShaped,
Я смотрю ты сразу кулхацкером родился?
__________________
.
Ответить с цитированием
  #8 (permalink)  
Старый 25.10.2012, 14:37
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

project1,
Нет, подумай над логикой, помучившись вскоре поймёшь. Ты просто к решению задачи подходишь не с той стороны.
__________________
.
Ответить с цитированием
  #9 (permalink)  
Старый 25.10.2012, 14:42
Интересующийся
Отправить личное сообщение для project1 Посмотреть профиль Найти все сообщения от project1
 
Регистрация: 06.10.2011
Сообщений: 24

Skipp,
Просто я не до конца знаю всех особенностей javascript'a. Может попытаться сделать запрос синхронным? Тогда пока ответ не придёт, дальше ничего не выполнится. Но это тоже неверно как-то...
Можешь хотябы намекнуть на правильный подход?
Ответить с цитированием
  #10 (permalink)  
Старый 25.10.2012, 14:43
Профессор
Отправить личное сообщение для BallsShaped Посмотреть профиль Найти все сообщения от BallsShaped
 
Регистрация: 14.09.2012
Сообщений: 162

Сообщение от Skipp
Я смотрю ты сразу кулхацкером родился?
Нет, я начала прочитал fuckin manual, а потом, когда возникали вопросы, пользовался поиском. И, о чудо!, не е**л мозги людям на форуме, задавая в тысячный раз одни и те же вопросы.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Области видимости событий Turok Events/DOM/Window 3 14.08.2011 20:26
Непонятки с областью видимости переменной zeleniy Общие вопросы Javascript 7 18.04.2011 16:08
стили Css в зависимости от высоты активной области браузера Vladimir_Kl Javascript под браузер 3 23.03.2011 16:04
Как узнать находится ли DOM элемент в области видимости? phgrey Общие вопросы Javascript 4 22.03.2011 19:05
области видимости элементов zaytsewa jQuery 14 11.01.2011 16:49