почитайте про асинхронность в JavaScript
на момент, когда запрос выполнится, и вызовется success,
return flag;
уже давно отработает
можно передавать callback в функцию
function query(data, mid, elem, callback) {
$.ajax({
/* ... */
success: function (server_response) {
/* ... */
if (data.status) {
status(true, data.msg)
callback(true);
} else {
status(false, data.msg)
callback(false);
}
},
error: function (err, texterr) {
status(false, 'error_ajax' + texterr)
}
});
}
query(data, mid, elem, (flag) => {
console.log(flag);
});
можно промисом
function query(data, mid, elem) {
const executor = (resolve, reject) => {
$.ajax({
/* ... */
success: function (server_response) {
/* ... */
if (data.status) {
status(true, data.msg)
resolve(true);
} else {
status(false, data.msg)
resolve(false);
}
},
error: function (err, texterr) {
status(false, 'error_ajax' + texterr)
reject();
}
});
};
return new Promise(executor);
}
query(data, mid, elem).then((flag) => {
console.log(flag);
});
если хочется асинхронный код писать синхронно, то можно воспользоваться промисами и async/await
(async () => {
const flag = await query(data, mid, elem);
console.log(flag);
})();