Установите переменную, равную выводу ajax, которая изменяется только при вызове - PullRequest
0 голосов
/ 25 марта 2019

У меня есть радио, и я работаю над частью "последней песни" сценария.Что я хочу сделать: получить URL из моего внешнего php-скрипта, воспроизвести песню, в конце песни установить глобальную переменную = текущий URL, вызвав функцию, при изменении URL глобальная переменная остается прежнейпока функция не была вызвана снова, и она обновляется с текущей песней.

В настоящее время все мои попытки возвращают неопределенное значение или "Uncaught TypeError: Невозможно установить свойство 'innerHTML' of null" в примере ниже.

var data = $.ajax({
url: '../scripts/radio.php',
data: {
attr1: 'value1'
},
success: function(data) {
console.log(data);
}
});

function playFirst(){

var lastSong = data;
document.getElementById("songName").innerHTML = data;
fileChosen = true;
setupAudioNodes();

var request = new XMLHttpRequest();

request.addEventListener("progress", updateProgress);
request.addEventListener("load", transferComplete);
request.addEventListener("error", transferFailed);
request.addEventListener("abort", transferCanceled);

request.open('GET', data, true);
request.responseType = 'arraybuffer';

// When loaded decode the data
request.onload = function() {

$("#title").html("Infinite");
$("#album").html("Infinite");
$("#artist").html("");
onWindowResize();
$("#title, #artist, #album").css("visibility", "visible");

// decode the data
context.decodeAudioData(request.response, function(buffer) {
// when the audio is decoded play the sound
sourceNode.buffer = buffer;
sourceNode.start(0);
$("#freq, body").addClass("animateHue");
//on error
}, function(e) {
console.log(e);
});
};
request.send();
};

1 Ответ

1 голос
/ 25 марта 2019

Данные возвращаются внутри обратного вызова success.Поскольку вы не сохранили возвращенное data, оно остается undefined при вызове playFirst().

Вы можете сохранить возвращенное data в глобальной переменной, например:

let data;
$.ajax({
    url: '../scripts/radio.php',
    data: {
        attr1: 'value1'
    },
    success: function(returnData) {
        data = returnData;
        console.log(data);
    }
});

Или позвоните playFirst() внутри success обратного вызова:

$.ajax({
    url: '../scripts/radio.php',
    data: {
        attr1: 'value1'
    },
    success: function(data) {
        playFirst(data);
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...