Как переопределить значение переменной в ajax?

Здравствуйте! Имеем код:

var objects = 'n';

    $.ajax({
        url: 'some_file.php',
        dataType:  'json',
        success: function (data) { objects = data; }
    });

    console.log(objects);

или
var objects = 'n';

    function someFunc(data) { objects = data; }

    $.ajax({
        url: 'some_file.php',
        dataType: 'json',
        success: someFunc
    });

    console.log(objects);

В консоль всегда выводится 'n'. Как можно переопределить эту функцию? В интернете ничего толком нет, кроме как сделать запрос синхронным (что не подходит)
  • Вопрос задан
  • 280 просмотров
Пригласить эксперта
Ответы на вопрос 2
@LiguidCool
Потому что асинхронность.
var objects = 'n';

    $.ajax({
        url: 'some_file.php',
        dataType:  'json',
        success: function (data) { 
            objects = data;
            console.log(objects);
        }
    });

И никак иначе. У вас вывод в консоль происходит еще до того, как данные пришли по AJAX. Разумеется выведется n, т.к. еще ничего и не вставляли.
Рассудите, зачем было бы тогда делать вообще вызов в success.

кроме как сделать запрос синхронным (что не подходит)

JS в принципе асинхронный и вас по этому поводу он спрашивать не будет. Просто при обычном использовании "скопируй это, перенеси сюда" это не заметно. Зато сразу заметно при запросах или анимации.
Ответ написан
AppFA
@AppFA
Frontend developer at Yandex
Либо делайте синхронным, либо вызывайте функцию после получения данных:
var objects = 'n';

function someFunc(data) {
    objects = data;
    process();
}

$.ajax({
    url: 'some_file.php',
    dataType: 'json',
    success: someFunc
});
...
function process() {
    console.log(objects);
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы