【问题标题】:Updating source of video tag with ajax使用 ajax 更新视频标签的来源
【发布时间】:2019-12-13 01:19:19
【问题描述】:

我有一个 html 页面,其中有一个日历、一个视频标签和一个按钮。当用户单击按钮时,根据时间戳,来自 Django 的视频文件的路径被发送并由 ajax 调用接收。当第一次打开或刷新页面并选择日期和时间然后按下按钮时,该日期和时间对应的视频将显示在页面上并可以播放。

但是,当我更改日期和时间时,之前打开的相同视频文件会显示在页面上,但是从 django 返回的视频文件的路径是根据新的日期和时间。

HTML 代码

<div style="margin-left: 10%">

<button type="submit" class="btn btn-secondary btn-lg" id="recorded" name="btn_submit" value="Play Recorded Videos" onclick="record()" >Play Recorded Videos</button>

</div>



<div id="videoDiv" class="container" style="margin-left: 10%; margin-top: 1%; align-items: center; display: none ">
    <video id='storedVideoId' width='100%' controls >
    </video>
    <br><br>
</div>

Javascript 代码

 <script type="text/javascript">

        var dateNow = new Date();
             dateNow.setDate(dateNow.getDate());

             var timer

            $(function () {
                $('#datetimepicker1').datetimepicker({ defaultDate:dateNow  });

            });


            function getDataFromServer() {
                getVideoFile()
            }

            function getSelectedDate() {
                var from_date = $("#datetimepicker1").data("date")

                return {'from_date':from_date}          
            }

            function getVideoFile(){

                selectedDate = getSelectedDate()

                   $.ajax({
                    url: "/video/getVideoFile/",
                    dataType: "json",
                    data : {"from_date":selectedDate.from_date},

                    success: function(result){

                        if (result.result === "SUCCESS") {
                              var res =  result.videoFilePath;
                            source =  document.createElement('source');
                            source.setAttribute('src', res);
                            source.setAttribute('type', 'video/mp4')
                            $('#storedVideoId').html(source)

                            $('#videoDiv').show()
                        } else {
                            $('#videoDiv').hide()
                            $('#videoDiv').empty()
                        }


                    }
                });
            } 

   </script>

我正在使用的以下 javascript 函数更改了文本和属性,因此当用户想要播放视频时,按钮上的文本应该是播放录制的视频,当停止它时,文本应该是停止录制的视频以及它隐藏了 div。

<script>
    function record(){

        var recorded = document.getElementById("recorded").getAttribute('value');
        var text;

        if (recorded === "Play Recorded Videos"){

            getDataFromServer();
            text = document.getElementById("recorded").innerHTML = "Stop Recorded Videos";
            document.getElementById("recorded").setAttribute('value',"Stop Recorded Videos");
                } 
        else if (recorded === "Stop Recorded Videos") {

            $('#videoDiv').hide();

            document.getElementById("recorded").innerHTML = "Play Recorded Videos";
            document.getElementById("recorded").setAttribute('value',"Play Recorded Videos");
        }

        else {
            getDataFromServer();
        }


        }
</script>

但是没有出现错误消息,即使更改了视频文件名对应的日期和时间,也只会显示页面刷新或加载时首先显示的视频文件。

【问题讨论】:

    标签: jquery html django ajax video


    【解决方案1】:

    未经测试,但您可以在success: function(result) 部分尝试此设置:

    success: function(result)
    {
    
        if (result.result === "SUCCESS") 
        {
            var res =  result.videoFilePath;
            alert("NEW video path : " + res); //should be a valid path eg: https://example.com/myvideo.mp4
    
            source =  document.getElementById('storedVideoId');
            source.setAttribute('src', res);
            source.setAttribute('type', 'video/mp4')
    
            source.play(); //test playback of new video
    
            $('#videoDiv').show()
        } 
        else 
        {
            $('#videoDiv').hide(); $('#videoDiv').empty();
        }
    
    }
    

    【讨论】:

    • 给我一些反馈。还要确保res 是一个可以粘贴在浏览器地址栏中的路径(字符串),以便在新选项卡中查看相同的视频文件。
    • edit :意思是使用 getElementById ,而不是您当前的 createElement 方法。我需要关于getElement(并更新其src 值)是否比使用createElement 效果更好的反馈...
    • 嗨,我按照你的建议做了,但没有显示视频文件,但是通过屏幕上的警报,我确信正确的路径即将到来。我不确定,但是否因为视频没有正确卸载?
    猜你喜欢
    • 2014-07-16
    • 2010-12-28
    • 2012-05-12
    • 2011-07-11
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多