Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   return в ajax (https://javascript.ru/forum/dom-window/73518-return-v-ajax.html)

Kaha 22.04.2018 13:53

return в ajax
 
Добрый день! Понимаю, что тема изъезжена вдоль и поперек, но не могу победить 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

Цитата:

Сообщение от Kaha
улетел в WebApis

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

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

Kaha 22.04.2018 23:11

Цитата:

Сообщение от laimas (Сообщение 483817)
Либо выполняйте нужное по ответу $.ajax в его методе...

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

laimas 22.04.2018 23:13

Цитата:

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

А что именно?

Kaha 22.04.2018 23:22

я хочу, чтобы callback поменялся с 0 на 1 в функции
.done(function(data){
       callback=1;
   });

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


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