Ajax-вызов является асинхронным, что означает, что он выполняется «вне пути». Функция выполняется и возвращается немедленно, и javascript продолжает свой веселый путь, в то время как вызов ajax выполняется «вне пути».
Вот почему он возвращает неопределенное значение, потому что это не так.
Чтобы предотвратить такое поведение, вам нужно установить его в «синхронный». И вам нужно определить returnData вне области действия функции.
Вы можете сделать это, установив
$.ajaxSetup({async:false});
А потом вызывать $ .post,
Или вы можете сделать $.ajax(... {async:false}...);
Итак, используя первый метод:
function someFunction(something1, something2) {
$.ajaxSetup({async:false}); //execute synchronously
var returnData = null; //define returnData outside the scope of the callback function
$.post("execute.php", { someData1: something1, someData2: something2 }, function(data) {
returnData = data;
});
$.ajaxSetup({async:true}); //return to default setting
return returnData;
}