Есть аякс запрос в функции
function Check_production(order_number){
var result = false;
$.ajax({
url: "load/check_production.php",
cache: false,
async: false,
data: {zakaz_number:zakaz_number},
type: 'POST',
success: function(data){
if (data == "true"){
result = true;
}else {
result = false;
}
}
});
return result;
}
Можно ли сделать более красиво без отключения асинхронного запроса / локальной переменной / каким либо еще способом, чтобы Check_production вернула result?
Ответ
Посмотрите в сторону объекта Deferred, пример с ajax:
function SomethingInit(id){
this.init = function(id) {
// Загрузка с сервера информации
this.load(id).done(function() {
// ... здесь продолжается инициализация ...
alert("продолжаем после успешного запроса");
}).fail(function(message) {
alert('ошибка..')
});
};
this.load=function(teamId){
var dfr = $.Deferred();
alert('посылаем запрос');
$.ajax({
url: 'load/check_production.php',
success: function(response, status, jqXHR){ dfr.resolve();},
error: function(jqXHR, status, error) { dfr.reject() ; }
});
return dfr; //dfr.promise();
};
this.init();
};
Также существует ряд библиотек-оберток для этого объекта, мне в свое время приглянулась JSDeferred: http://habrahabr.ru/post/108575/
Комментариев нет:
Отправить комментарий