Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не правильная последовательность выполнения (https://javascript.ru/forum/misc/30745-ne-pravilnaya-posledovatelnost-vypolneniya.html)

ImpulsGraw 14.08.2012 12:38

Не правильная последовательность выполнения
 
Здравствуйте! Есть код, состоящий из функции и её вызова(JQuery). Но почему-то функция заканчивает своё выполнение в при её вызове прежде, чем закончится весь код в функции и возвращает undefined.

alert(postServerRequest('CHECK_LAST_NEW', {'p1':'5'})); //1

function postServerRequest(sysquest, paramar){
paramar.action = sysquest;
$.post('server.php', paramar, function(res__){
alert(res__); //2
if(res__.indexOf('TRUE') != -1) return true;
else return false;
});
}


Сервер должен обработать запрос и написать TRUE.
Сначала показывается сообщение undefined(1), а потом TRUE(2), чего быть не может.

Dmitriyff 14.08.2012 13:25

функция postServerRequest не возвращает значения, следовательно alert будет выводить undefined

а быть это может потому, что запрос асинхронный

Dmitriyff 14.08.2012 13:28

собствено callback function(res__) для того и передается, чтобы обработать результат после выхода из функции

вот тут почитайте

ImpulsGraw 14.08.2012 15:47

а как тогда задержать выполнение функции до вызова callback?

Deff 14.08.2012 16:57

ImpulsGraw,
Зачем ? вызовите алерт внутри - а тут только запуск (если нужно что запустить - кликните из удачного калбека какую нидь кнопку
postServerRequest('CHECK_LAST_NEW', {'p1':'5'}); //1

function postServerRequest(sysquest, paramar){
paramar.action = sysquest;
$.post('server.php', paramar, function(res__){
alert(res__); //2
if(res__.indexOf('TRUE') != -1) return true;
else return false;
});
}

ImpulsGraw 14.08.2012 22:31

Всё решилось достаточно просто) На самом деле, важен не алерт, а резуальтат функции, алерты расставил для проверки.

function postServerRequest(sysquest, paramar){
var result = '';
paramar.action = sysquest;
var fullparam = {url: 'server.php', data: paramar, success: function(data){
result = data;
}, async: false, type: 'post'};
$.ajax(fullparam);
return result;
}


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