Потому что асинхронность.
var objects = 'n';
$.ajax({
url: 'some_file.php',
dataType: 'json',
success: function (data) {
objects = data;
console.log(objects);
}
});
И никак иначе. У вас вывод в консоль происходит еще до того, как данные пришли по AJAX. Разумеется выведется
n, т.к. еще ничего и не вставляли.
Рассудите, зачем было бы тогда делать вообще вызов в success.
кроме как сделать запрос синхронным (что не подходит)
JS в принципе асинхронный и вас по этому поводу он спрашивать не будет. Просто при обычном использовании "скопируй это, перенеси сюда" это не заметно. Зато сразу заметно при запросах или анимации.