Для решения таких задач предназначен
Promise.
Это могло бы выглядеть так:
new Promise(send).then(
function (data) {
// И вот тут получаем данные
},
function () {
// Провал
}
);
function send (metod, url, value, header) {
var p = new XMLHttpRequest(),
body = null;
if (metod && metod.toLoweCase() == 'post') {
body = value;
p.setRequestHeader('Content-Type', header || 'application/x-www-form-urlencoded');
}
p.open(metod, url);
p.send(body);
p.addEventListener('readystatechange', function() {
if (this.readyState === this.DONE && this.status >=200 && this.status < 400) {
resolve(JSON.parse(this.responseText));
} else {
reject();
}
});
}
Увы, поддержка пока
отсутствует в
IE (только в
Edge).
По этой причине до сих пор придётся для решения в нативном
Javascript передавать
callback, как уже сказал
twobomb, или использовать
jQuery#Deferred().
send();
function send (metod, url, value, header) {
$.ajax({
url: url,
type: metod,
data: value,
dataType: 'json'
}).done(function (data) {
// И вот тут получаем данные
}).error(function () {
// Провал
});
}