topwebmaster
@topwebmaster
Веб-программист, django, laravel, php, python

Как положить данные ajax в переменную?

Собственно вся суть в вопросе:
function ax(url, callback) {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', url);
    xhr.onreadystatechange = function(){
        if (this.readyState == 4) {
            if (this.status == 200)
                callback(this.responseText);
            // иначе сетевая ошибка
        }
    };
    xhr.send(null);
}

function ДайУрл() {
    var gUrl = 'http://localhost:8000/p/';
    var furl;
    ax(gUrl, function (data) {
        furl = data;
        return furl;
    });
    console.log(furl);
    return furl;
}


Как заставить "ДайУрл" отдавать данные, в конcоль вывод идёт, а return undefined?
  • Вопрос задан
  • 178 просмотров
Пригласить эксперта
Ответы на вопрос 2
Советую почитать про то, что такое асинхронность и что такое promise
Ответ написан
Комментировать
@vshvydky
function ax(url, callback) {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', url);
    xhr.onreadystatechange = function(){
        if (this.readyState == 4) {
            if (this.status == 200)
                callback(this.responseText);
            // иначе сетевая ошибка
        }
    };
    xhr.send(null);
}

function getUrl() {
    var gUrl = 'http://localhost';
    ax(gUrl, function (data) {
        console.log(data);
    });
}

У вас функция function (data) выполняется хз где и когда, а точнее , когда уже уничтожен экземпляр функции ДайУрл.... Если не хочется особо вникать ни во что, достаточно той переписки, что я скинул. Если хотите данные писать куда-то в переменную, объявите ее на уровень выше своей функции ДайУрл и пушите туда что надо. А вообще совет, почитайте учебник learn.javascript.ru . Кстати на промисах это будет действительно изящнее. Как это сделать поймете прочитав книгу.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
24 нояб. 2024, в 01:35
5000 руб./за проект
24 нояб. 2024, в 01:24
500 руб./за проект
24 нояб. 2024, в 00:04
5000 руб./за проект