Вход

Просмотр полной версии : return в ajax


Kaha
22.04.2018, 13:53
Добрый день! Понимаю, что тема изъезжена вдоль и поперек, но не могу победить return в $.ajax

Делаю так (пытаюсь через область видимости):

window.onload = function() {
var callback = 0;

var data2 = "data=bugoga";
$.ajax({
type: "POST",
url: "./test.php",
data: data2
}).done(function(data){
callback = 1;
});

alert(callback);
}


алертом выводится 0, а нужно, чтобы 1))
Подскажите, пожалуйста!

laimas
22.04.2018, 14:18
"Ок, Гугл, что такое асинхронность в JavaScript?"

Kaha
22.04.2018, 21:41
Разобрался с асинхронностью, узнал про WebApis, Stack. Верно ли я понимаю, что операции выполняются следующим образом:
1) var callback = 0;
2) $.ajax({}) улетел в WebApis, потом в очередь задач (task's queue), потом event loop запулил его в stack
3)alert(callback); //вывелся коллбэк, который собственной и не изменялся, как был 0 так 0 и остался.
4) После Того как Event Loop выпнул из очереди задач фидбэк ajax запроса, он выполнится:
.done(function(data){
callback = 1;
});

Kaha
22.04.2018, 21:43
Только после этого callback станет равным 1, я верно понимаю алгоритм работы?

Kaha
22.04.2018, 22:12
с return то что делать?)

рони
22.04.2018, 22:27
Kaha,
:-?
а нельзя как-то так?

.done(function(data){
fn(1);
});

laimas
22.04.2018, 23:03
улетел в WebApis

А проще и без полтергейста представить нельзя? Считайте, что и $.ajax, и alert запущены одновременно, и никого из них не обязывают ожидать другого. При этом кто из них завершит работу быстрее? Returt что-то решить в этом случае?

Либо выполняйте нужное по ответу $.ajax в его методе, либо promise (что по сути тоже, что и первое), либо в особо тяжких случае, если в этом соль, следите за изменениями DOM.

Kaha
22.04.2018, 23:11
Либо выполняйте нужное по ответу $.ajax в его методе...

Так я бы с радостью... но не работает же...

laimas
22.04.2018, 23:13
Так я бы с радостью... но не работает же...

А что именно?

Kaha
22.04.2018, 23:22
я хочу, чтобы callback поменялся с 0 на 1 в функции

.done(function(data){
callback=1;
});

Эксперты, подскажите, где я не прав, где не догоняю? Мне нужно получить результат в теле фидбэка

laimas
22.04.2018, 23:30
А это почему не устраивает https://javascript.ru/forum/483814-post6.html?

Почитайте об этом в среде JQ

http://jquery.page2page.ru/index.php5/Объект_callbacks
http://jquery.page2page.ru/index.php5/Объект_deferred

Kaha
23.04.2018, 06:52
Спасибо! Ушел ртфмить)

Kaha
23.04.2018, 20:28
Коллеги, мое искреннее спасибо за терпение и ссылки! Понимание как оно там все фурыкает пришло!)