Получение JSON через ajax — асинхронная операция. JavaScript же синхронный, поэтому вызовы $.get и alert происходят мгновенно один за другим, и только потом вызовется функция obrabotka.
Получить доступ к arr можно только внутри функции obrabotka.
Спасибо за отклик! А то я уже в отчаянии :-(
То есть, вся моя работа с данными JSON должна идти внутри функции obrabotka? Мне такое кажется очень надуманным и неуклюжим :-(
Я думал так "только бы дорваться до переменной, в которой лежат json-данные, а дальше я сам."
Я уж и переменную глобальной сделал, и $.when подтянул... Всё зря?
Получается, что вся моя прога (я делаю калькулятор стройматериалов) должна лежать внутри функции obrabotka?
$(function(){
var ajax_data=$.getJSON('file.php',function(data){
arr = Object.keys(data).map(
(key) => [key, data[key]]
);
});
$.when(ajax_data).done(function(){
alert("Ура, вот данные из mySQL! "+arr[2])
//стоп. Получается, ВЕСЬ дальнейший код мне надо писать внутри $.when??? Какой ужас!
});
alert("этот алерт никогда не дождется данных. Печалька. "+arr[2]);
});
Внутри коллбека с полученными данными вы можете вызвать другую функцию, прокинув их туда. И всю логику писать уже в ней. В этом нет ничего плохого или неуклюжего.
Логику работы с данными можно дополнительно декомпозировать на мелкие чистые функции.
callback - это та самая obrabotka, то есть, отзыв на инфу с сервера, я верно понял?
И именно там я буду писать всякие функции, формулы и так далее. Правильно?
Igor Fedorov, огромное вам спасибо.
Поскакал делать калькулятор стройматериалов
(о боги, зачем я за это взялся, лучше бы учил детей пузырьковой сортировке!)