Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   return в callback (https://javascript.ru/forum/extjs/57476-return-v-callback.html)

maksimka2112 05.08.2015 13:11

return в callback
 
Здравствуйте !
У меня extjs 3. В ext.onready делаю алерт:
alert (myfunc())

Получаю undefined. В ф-ции, которая в алерте, находится аякс запрос.
function myfunc(){
Ext.Ajax.request({
url: 'p.php', method: 'post',
callback: function(opts,suss,resp){
var c=1;
return c;
}
})
}

В пхп echo 1. Скажите, почему я получаю undefined ? Почему код в callback не работает, точнее не виден?

join 05.08.2015 14:09

если нужно вывести var c:

https://jsfiddle.net/yp1bgz62/


ps: за пределами callback, переменную c не будет видно. Обычно так не делают. Хотя мож так нужно тебе.

maksimka2112 05.08.2015 14:38

Цитата:

Сообщение от join (Сообщение 382827)
ps: за пределами callback, переменную c не будет видно

И ничего нельзя поделать,чтобы её было видно? Чтобы её можно было получить с помощью фунции myFunc, то есть сделать var myvar=myFunc () и чтоб в myvar было значение из callback

join 05.08.2015 14:42

вынеси var c; за пределы myFunc(). и убери var в самой функции, оставив c=1.

maksimka2112 05.08.2015 14:53

Цитата:

Сообщение от join (Сообщение 382831)
вынеси var c; за пределы myFunc(). и убери var в самой функции, оставив c=1.

Делал так,не помогает

join 05.08.2015 17:27

:-E может пивка для рывка?

khusamov 05.08.2015 18:06

Это же асинхронный вызов. То есть функция myFunc завершает выполнение ДО ТОГО как завершится функция callback. Поэтому myFunc не сможешь выдать с

кстати, у вас в функции myFunc нет даже return)))

maksimka2112 06.08.2015 08:38

Цитата:

Сообщение от khusamov (Сообщение 382859)
Это же асинхронный вызов. То есть функция myFunc завершает выполнение ДО ТОГО как завершится функция callback. Поэтому myFunc не сможешь выдать с

кстати, у вас в функции myFunc нет даже return)))

То,что ассинхронный я понял. Просто думал,что можно как-то изловчиться. В 4 эксте всё решается командой async: false, но у меня 3 экст...
return есть в callback, вы невнимательно смотрели. Но если его вывести за пределы callback, то будет возвращаться совершенно иная переменная. И даже определение её в качестве глобальной не поможет, функция,как вы и сказали,выполнится быстрее ответа с сервера. Видимо мою проблему не решить. Либо решить подключением jQuery или prototype.js

khusamov 06.08.2015 12:59

Цитата:

return есть в callback,
А я не про callback
В функции myFunc нет return, а вы делаете alert (myfunc()), значит что-то ждете из myFunc, у которой нет return))))

khusamov 06.08.2015 13:06

Цитата:

Просто думал,что можно как-то изловчиться. В 4 эксте всё решается командой async: false,
Забавно звучит "изловчиться" в отношении асинхронных вызовов.

Вот что я скажу, опцию async: false нельзя использовать. Надо программировать так, чтобы все вызовы были только асинхронные.

Опция async: false это на крайний случай или для построения времянки. Нечто аналогичное как goto команда, которой тоже пользоваться нельзя))))

Цитата:

Видимо мою проблему не решить.
К сожалению вы не описали саму проблему. Не ясно что вы там решаете. Если то, что написали в первом посте, то решение привели во втором посте. То есть человек вам сразу вывел значение переменной С. Но вам же другое нужно, а что именно - вы не пишите.

Вам чем не понравилось решение из второго поста?

Вот, привожу его повторно:

function myfunc(){
    Ext.Ajax.request({
        url: '/', 
        method: 'post',
        callback: function(opts, suss, resp){
            var c = 1;
            return alert(c);
        }
    })
}
myfunc();


В общем распишите подробнее, тогда есть шанс вам помочь.


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