#javascript #jquery #json #video.js
#javascript #jquery #json #video.js
Вопрос:
Я пытаюсь установить источник и тип для Video.js динамически через объект JSON, который извлекается из удаленного вызова метода.
radioPlayer = videojs("RadioPlayer");
function RadioListPage() {
$.getJSON(serviceURL 'rbApp.cfc?method=Radio', function(data) {
$.each(data.DATA, function(index, itemData) {
$('#radioList').append('<div class="play" data-type="' itemData[4] '" data-src="' itemData[3] '" data-station="' itemData[1] '" data-id="' itemData[0] '"><img src="' itemData[2] '"></div>');
lastIDNumberVideo = itemData[0];
});
$('#radioList .play').click(function() {
var stationObject = new Object();
stationObject.src = $(this).data("src");
stationObject.type = $(this).data("type");
var jsonStr = JSON.stringify(stationObject);
radioPlayer.src(jsonStr);
radioPlayer.play();
});
loading('hide', 100);
});
}
VideoJS выдаст сообщение об ошибке, что поток недействителен. Однако, если я возьму эту переменную jsonStr и жестко запрограммирую это значение, подобное этому radioPlayer.src({«src»:»http://wlca-stream.lc.edu:8004/wlca «,»type»:»audio / mpeg»}) воспроизводится без проблем. Чего мне здесь не хватает? Разве это невозможно сделать?
Комментарии:
1. Пример кода предоставляет объект JS для
src()
метода, но вы предоставляете JSON. УдалитеJSON.stringify()
вызов или просто используйтеradioPlayer.src(stationObject);
2. Что сказал Рори, ты вызываешь
radioPlayer.src('{"src":"http://wlca-stream.lc.edu:8004/wlca","type":"audio/mpeg"}');
, когда запускаешьJSON.stringify()
Ответ №1:
Приведенный вами пример кода предоставляет объект JS для src()
метода, но вы предоставляете JSON. Попробуйте предоставить объект непосредственно методу.
Также обратите внимание, что я бы посоветовал вам использовать делегированный обработчик событий вместо привязки событий в обратном вызове AJAX, что может привести к проблемам с дублированием событий. Попробуйте это:
radioPlayer = videojs("RadioPlayer");
$('#radioList').on('click', '.play', function() {
radioPlayer.src({
src: $(this).data("src"),
type: $(this).data("type")
});
radioPlayer.play();
});
function RadioListPage() {
$.getJSON(serviceURL 'rbApp.cfc?method=Radio', function(data) {
let html = data.DATA.map(item => `<div class="play" data-type="${item[4]}" data-src="${item[3]}" data-station="${item[1]}" data-id="${item[0]}"><img src="${item[2]}"></div>`);
$('#radioList').append(html);
lastIDNumberVideo = data.DATA.slice(-1)[0];
loading('hide', 100);
});
}
Комментарии:
1. Это сделало это. Большое вам спасибо. Вчера потратил на это часы.