0

Мне нужно перезаписывать значения атрибута src для дальнейшей работы с тегом img, значение записывается как временное и когда мне надо извлечь потом новое значение src я в итоге ничего не получаю.

    var author_track = obj.querySelector('.track-name');
    var img = obj.querySelector('img');
    if (author_track) {
        var name = author_track.innerHTML.match(/(.+)\s+-\s+.+/);
        $.ajax({
            url: '/serializers/AlbumAudioTrack/',
            type: 'GET',
            data: {
                author_track: name[1]
            },
            success: function (album) {
                if (album[0]) {
                    img.src = album[0].photo;
                } else {
                    img.removeAttribute('src');
                    img.setAttribute('src', '/media/user_16131596871613159687/photo/AlbumDefault.jpg');
                }
            }
        });
    }
    console.log(img.src);

Есть решение данной проблемы?

Jony
  • 43

2 Answers2

1

А так не вариант?

var author_track = obj.querySelector('.track-name');
    var img = obj.querySelector('img');
    if (author_track) {
        var name = author_track.innerHTML.match(/(.+)\s+-\s+.+/);
        $.ajax({
            url: '/serializers/AlbumAudioTrack/',
            async: false, 
            type: 'GET',
            data: {
                author_track: name[1]
            },
            success: function (album) {
                if (album[0]) {
                    img.src = album[0].photo;
                } else {
                    img.src = '/media/user_16131596871613159687/photo/AlbumDefault.jpg';
                }
            }
        });
    }
    console.log(img.src);

Изменил сделал запрос синхронным, раз вы не можете обрабатывать асинхронные запросы

А через асинхронный так нужно проверять

var author_track = obj.querySelector('.track-name');
var img = obj.querySelector('img');
if (author_track) {
    var name = author_track.innerHTML.match(/(.+)\s+-\s+.+/);
    $.ajax({
        url: '/serializers/AlbumAudioTrack/',
        type: 'GET',
        data: {
            author_track: name[1]
        },
        success: function (album) {
            if (album[0]) {
                img.src = album[0].photo;
            } else {
                img.src = '/media/user_16131596871613159687/photo/AlbumDefault.jpg';
            }
            console.log(img.src);
        }
    });
}
Aziz Umarov
  • 22,567
  • 2
  • 10
  • 33
  • К сожалению нет, возвращается значение которое было по дефолту, то есть ничего =( – Jony Mar 11 '21 at 12:38
  • Правильно это ajax. Вам нужно смотреть по ответу – Aziz Umarov Mar 11 '21 at 12:41
  • console.log выкинь. – Qwertiy Mar 11 '21 at 12:44
  • Да, через синхронный выводит то что надо, спасибо. – Jony Mar 11 '21 at 12:50
  • Да, я знаю, что проверка внутри запроса дает то, что запрашиваю, просто далее я хочу использовать новое значение src после условия, а при дальнейшем использовании переменной img оно возвращает дефолтное значение, а не то, что я получил по гету. – Jony Mar 11 '21 at 12:59
  • @Jony в любом случае если ответ помог то можете пометить как полезный – Aziz Umarov Mar 11 '21 at 13:00
0

Вся причина в том, что console.log(img.src) выполняется до того, как выполнится запрос ajax(), так как это асинхронный запрос. Вы можете использовать метод then(), чтобы решить проблему.

var author_track = obj.querySelector('.track-name');
var img = obj.querySelector('img');
if (author_track) {
    var name = author_track.innerHTML.match(/(.+)\s+-\s+.+/);
    $.ajax({
        url: '/serializers/AlbumAudioTrack/',
        type: 'GET',
        data: {
            author_track: name[1]
        },
        success: function (album) {
            if (album[0]) {
                img.src = album[0].photo;
            } else {
                img.removeAttribute('src');
                img.setAttribute('src', '/media/user_16131596871613159687/photo/AlbumDefault.jpg');
            }
        }
    }).then(function(){
        console.log(img.src);
    });
}
fixer
  • 1,002