UPDATE AJAX + LARAVEL

Asked

Viewed 140 times

1

I need to update my table VIEW when the user watches 90% of the video of Vímeo, but I cannot use this logic with the Laravel.

I have this following code in PHP normal:

<div class="meu_iframe">
    <iframe src="https://player.vimeo.com/video/41578877" width="640" height="360" frameborder="0" allowfullscreen></iframe>
</div>

<!-- Inclusão jQuery -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://player.vimeo.com/api/player.js"></script>

<script type="text/javascript">
    $(function(){
        //inclusão do plugin
        if($('.meu_iframe').length){
            //aqui faz a captura do iframe
            var iframe = document.querySelector('iframe');
            //aqui inicia o plugin do vimeo
            var player = new Vimeo.Player(iframe);
            //aqui faz a chamada do evento on e solicita o 'play'(indica que o vídeo foi startado)
            //existe outros parametros como pause, ended, timeupdate...
            player.on('play', function(tempo) {
                //aqui captura o tempo total do vídeo
                var tempoTotal = tempo.duration;
                //aqui captura o percentual em execução do vídeo
                var percentAssistido = tempo.percent;
                //aqui captura os segundos em execução do vídeo
                var segundosAssistido = tempo.seconds;
                console.log(tempoTotal);
                //essa funcao conta o tempo do vídeo e depois envia um post pro arquivo php
                setTimeout(function () {
                    $.post('ajax.php', {tempo_video: tempoTotal}, function (data) {
                        if(data.atualizado){
                            alert("Tabela atualizada no banco");
                        }
                    }, 'json');
                }, (Math.trunc(tempoTotal) * 1000));
            });       
        }
    });

</script>

There inside the archive ajax.php can make my UPDATE. But I can’t play this for the Laravel...

I tried that but it didn’t work.

View

 <script type="text/javascript">
    $(function(){
        //inclusão do plugin
        if($('.meu_iframe').length){
            //aqui faz a captura do iframe
            var iframe = document.querySelector('iframe');
            //aqui inicia o plugin do vimeo
            var player = new Vimeo.Player(iframe);
            //aqui faz a chamada do evento on e solicita o 'play'(indica que o vídeo foi startado)
            //existe outros parametros como pause, ended, timeupdate...
            player.on('play', function(tempo) {
                //aqui captura o tempo total do vídeo
                var tempoTotal = tempo.duration;
                //aqui captura o percentual em execução do vídeo
                var percentAssistido = tempo.percent;
                //aqui captura os segundos em execução do vídeo
                var segundosAssistido = tempo.seconds;
                console.log(tempoTotal);
                //essa funcao conta o tempo do vídeo e depois envia um post pro arquivo php
                setTimeout(function () {
                    $.post('{{route('ajaxview')}}', {tempo_video: tempoTotal}, function (data) {
                        if(data.atualizado){
                            alert("Tabela atualizada no banco");
                        }
                    }, 'json');
                }, (Math.trunc(tempoTotal) * 1000));
             });
        }
    });
</script>

Route

$this->post('ajax', 'SchoolController@ajaxView')->name('ajaxview');

Control

public function ajaxview(Request $request)
 {
     return view('school.salavirtual.ajaxview');
 }
  • Put here the code of your ajax.php

  • He is recognizing this code ($. post('{route('ajaxview')}}') as a route from the Laravel? makes a test and tries to switch to $.post('/ajax').....

  • Code from my ajax.php <? php //When the video ends javascript will send a post to that file. Here you recover with the name you passed inside the $.post $json = null; $timeDoVideo = $_POST['tempo_video']; //In this file you update in the database and if you want to send a return, just initialize the $json $json['updated'] = true; //can send values back to another tbm if ($json){ echo json_encode($json); }

1 answer

0

you need to put the ajax.php code in your controller, but instead of echo you can just return the variable $jSON. By default the Standard will convert your reply to json.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.