Php 如何在Laravel数据库中存储视频播放进度时间
我有一个用户表和课程表。在用户表中,我有一个watch_history列,我想在其中存储当前播放视频的课程id和当前时间的数据,以便用户可以继续从skip或left视频观看 我是ajax新手,所以我不知道如何使用ajax将数据连续发送到数据库 这是我在控制台中打印当前时间的JS代码Php 如何在Laravel数据库中存储视频播放进度时间,php,jquery,ajax,laravel,Php,Jquery,Ajax,Laravel,我有一个用户表和课程表。在用户表中,我有一个watch_history列,我想在其中存储当前播放视频的课程id和当前时间的数据,以便用户可以继续从skip或left视频观看 我是ajax新手,所以我不知道如何使用ajax将数据连续发送到数据库 这是我在控制台中打印当前时间的JS代码 <script> var vid = document.getElementById("player"); $(function() { var
<script>
var vid = document.getElementById("player");
$(function() {
var timeout;
$("#player").on("playing pause", function(e) {
// save reference
var v = this
// clear previous timeout, if any
clearTimeout(timeout)
// call immediately if paused or when started
performaction(v.currentTime, v.duration)
// set up interval to fire very 5 seconds
if (e.type === "playing") {
timeout = setInterval(function() {
performaction(v.currentTime, v.duration)
}, 3000)
}
})
function performaction(currentTime, duration) {
console.log(currentTime);
}
})
</script>
var vid=document.getElementById(“播放器”);
$(函数(){
var超时;
$(“#播放器”)。打开(“播放暂停”,函数(e){
//保存引用
var v=这个
//清除以前的超时(如果有)
clearTimeout(超时)
//暂停或启动时立即呼叫
性能(v.currentTime,v.duration)
//设置每5秒开火的间隔
如果(例如,类型==“播放”){
超时=设置间隔(函数(){
性能(v.currentTime,v.duration)
}, 3000)
}
})
功能执行(当前时间、持续时间){
console.log(当前时间);
}
})
如何使用Laravel中的ajax在一个阵列中发送带有课程id的视频计时。我正在使用plry.io视频播放器。上面的JS代码出现在Lesson_video.blade.php页面上,我在该页面上有课程id
我正在做一个大学项目。在您的html中:
<input type="hidden" name="_token" value="{{csrf_token()}}"/>
在路由/web.php
中:
Route::post('/saveTime/{video}', 'InstructorCourseController@saveTime')->name('video.saveTime');
Route::get('/getTime/{video}', 'InstructorCourseController@getTime')->name('video.getTime');//Route for getting the saved time
public function saveTime(Request $request, $video){
$request->validate([
'time' => 'required',
'duration' => 'required'
]);
$user = Auth::user();
if($user === null){
return response()->json(['message' => 'User not authenticated', 403);
}
$user_id = $user->id;
$video = Video::where('id',$video)->first();
if($video === null){
return response()->json(['message' => 'Video not found', 404);
}
$currentTime = $request->time;
$duration = $request->duration;
//save them somewhere
return response()->json(['message' => 'Time saved', 200);//send http response as json back to the ajax call
}
public function getTime(Request $request, $video){
$user = Auth::user();
if($user === null){
return response()->json(['message' => 'User not authenticated', 403);
}
$video = Video::where('id',$video)->first();
//get the time from saved time where you saved it with this data
$playbackTime = Somemodel::where('video_id',$video->id)->where('user_id',$user->id)->get()->last();//use this one if you insert the time instead of updating an existing row each time a time is saved.
$playbackTime = Somemodel::where('video_id',$video->id)->where('user_id',$user->id)->first();//use this one if you update the time instead of inserting a new row each time a time is saved.
if($playbackTime === null){
//there's no saved time
$playbackTime = 0;
}else{
$playbackTime = $playbackTime->currentTime;//use what column you saved the time in.
}
return response()->json(['playbackTime' => $playbackTime, 200);
}
在您的InstructorCourseController.php
中:
Route::post('/saveTime/{video}', 'InstructorCourseController@saveTime')->name('video.saveTime');
Route::get('/getTime/{video}', 'InstructorCourseController@getTime')->name('video.getTime');//Route for getting the saved time
public function saveTime(Request $request, $video){
$request->validate([
'time' => 'required',
'duration' => 'required'
]);
$user = Auth::user();
if($user === null){
return response()->json(['message' => 'User not authenticated', 403);
}
$user_id = $user->id;
$video = Video::where('id',$video)->first();
if($video === null){
return response()->json(['message' => 'Video not found', 404);
}
$currentTime = $request->time;
$duration = $request->duration;
//save them somewhere
return response()->json(['message' => 'Time saved', 200);//send http response as json back to the ajax call
}
public function getTime(Request $request, $video){
$user = Auth::user();
if($user === null){
return response()->json(['message' => 'User not authenticated', 403);
}
$video = Video::where('id',$video)->first();
//get the time from saved time where you saved it with this data
$playbackTime = Somemodel::where('video_id',$video->id)->where('user_id',$user->id)->get()->last();//use this one if you insert the time instead of updating an existing row each time a time is saved.
$playbackTime = Somemodel::where('video_id',$video->id)->where('user_id',$user->id)->first();//use this one if you update the time instead of inserting a new row each time a time is saved.
if($playbackTime === null){
//there's no saved time
$playbackTime = 0;
}else{
$playbackTime = $playbackTime->currentTime;//use what column you saved the time in.
}
return response()->json(['playbackTime' => $playbackTime, 200);
}
var data={time:currentTime}//要发送到服务器的数据var dataType=“json”/server$的预期数据类型。post({url:'/saveTime/'+videoId+'/'+userId,//存储时间数据的服务器的url数据:数据,成功:函数(数据,状态){alert(状态);alert(json.parse(数据));},数据类型:dataType})代码>如果我在console语句之后在performaction函数中编写此代码,可以吗。还有什么我们应该写在控制器中的东西吗?我们需要为它创建任何路由吗?是的。如果插入正确的url和正确的数据,它应该可以正常工作。函数性能(currentTime,duration){console.log(currentTime);var data={time:currentTime};var dataType=“json”$.post({url:'/saveTime/'+videoId+'/'+userId,数据:数据,成功:函数(数据,状态){alert(status);alert(JSON.parse(data));},dataType:dataType};}是的,您需要创建一个路由route::post('/whatrouteyouwant/{video}/'),'videoController@saveTime')->name('video.saveTime');
和一个控制器方法,您可以实际获取用户id,无需在请求中传递。您的代码成功运行。我不知道您的姓名,但我非常感谢您的帮助!因此,我需要的最后一个帮助是如何在视频播放器中让用户节省时间?@Abhishekpardeshi在javascript中,您可以获得节省的时间f可能是从另一条线路上下载,并将视频播放设置在那里?非常感谢。我会尝试。我尝试使用get方法,但仍然无法获取。因此,请您给我从节省的时间中播放视频的代码。@halfer我不知道。我自己不是一个学者。我只是给出了一个如何在laravel中完成的示例,而不是确切的代码tho.t谢谢你的通知。