25.10.2012, 13:58
|
Интересующийся
|
|
Регистрация: 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.
|
|
25.10.2012, 14:11
|
|
.
|
|
Регистрация: 30.03.2010
Сообщений: 1,813
|
|
Ну так правильно callback сработает, только тогда, когда сервер ответит, а return функцией будет возвращён сразу.
Поставьте таймер и выведете ret и посмотрите, что он вам покажет.
__________________
.
|
|
25.10.2012, 14:21
|
Интересующийся
|
|
Регистрация: 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
|
|
25.10.2012, 14:28
|
|
.
|
|
Регистрация: 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.
|
|
25.10.2012, 14:31
|
Профессор
|
|
Регистрация: 14.09.2012
Сообщений: 162
|
|
БЛЕАТЬ!!! Сколько можно! Одни и те же грабли! Учи основы!!!
Цитата:
|
setTimeout('alert(ret)', 2000);
|
Так верстаютпрограммируют только мудаки! Строка выполняется в глобальном скопе!
|
|
25.10.2012, 14:33
|
Интересующийся
|
|
Регистрация: 06.10.2011
Сообщений: 24
|
|
Работает, спасибо)
А как мне лучше реализовать мою функцию?
Через таймаут возвращать значение? - Как-то неверно...
|
|
25.10.2012, 14:36
|
|
.
|
|
Регистрация: 30.03.2010
Сообщений: 1,813
|
|
BallsShaped,
Я смотрю ты сразу кулхацкером родился?
__________________
.
|
|
25.10.2012, 14:37
|
|
.
|
|
Регистрация: 30.03.2010
Сообщений: 1,813
|
|
project1,
Нет, подумай над логикой, помучившись вскоре поймёшь. Ты просто к решению задачи подходишь не с той стороны.
__________________
.
|
|
25.10.2012, 14:42
|
Интересующийся
|
|
Регистрация: 06.10.2011
Сообщений: 24
|
|
Skipp,
Просто я не до конца знаю всех особенностей javascript'a. Может попытаться сделать запрос синхронным? Тогда пока ответ не придёт, дальше ничего не выполнится. Но это тоже неверно как-то...
Можешь хотябы намекнуть на правильный подход?
|
|
25.10.2012, 14:43
|
Профессор
|
|
Регистрация: 14.09.2012
Сообщений: 162
|
|
Сообщение от Skipp
|
Я смотрю ты сразу кулхацкером родился?
|
Нет, я начала прочитал fuckin manual, а потом, когда возникали вопросы, пользовался поиском. И, о чудо!, не е**л мозги людям на форуме, задавая в тысячный раз одни и те же вопросы.
|
|
|
|