javascript - 如何使用 AJAX 重新加载 Laravel @includes?
问题描述
我在较大的应用程序中有一个单页应用程序,它将数据发送到数据库,并且还将显示同一个表的数据。目前,我有 AJAX 动态发送数据。但是,要让刚刚插入的数据出现在我想要的表中,我必须刷新。我整个早上都在尝试,但下面是目前的状态。
风景:
<html>
<head>
<!--I took some stuff out to make it easier to look at -->
</head>
<body onresize="resizeRecalc()">
<div class="container-fluid">
<div class="row header">
<div class="col-12">
<img src="{{ URL::asset('images/takeStatsLogo.png') }}" id="header-logo" />
</div>
</div>
<div class="mainArea row">
<div class="left col-8">
<div onclick="playPause()" class="embed-responsive embed-responsive-16by9">
<video id="gameFilm" src="{{ URL::asset('images/basketball.mp4') }}" preload="metadata"></video>
</div>
<div class="timebar">
<span class="timeItem" id="timestamp"></span>
<div onclick="changeVidTime()" onmousemove="moveLine(event)" onmouseout="REmoveLine()" id="outerBox"> <div id="progressBox"> <div id="placeMarker">
</div></div></div>
<span class="timeItem" id="duration-place"></span>
</div>
<!-- This is a key part -->
<div id="statList">
@include('partials.statList')
</div>
</div>
<div id="right" class="right col-4">
<!--Checking if we should make the user select starters. If we have them, no need to do that...-->
@if ($game->starters != null)
@include('partials.areStarters')
@else
@include('partials.noStarters')
@endif
</div>
</div>
</div>
<script>
//Add Stat Form
//This part here will add the stats, but it won't refresh them!
$('input#addStatButton').click( function() {
$.post( '{{action("StatController@store")}}', $('form#new_stat').serialize(), function(data) {
$('#statList').load('/take-stats/{{$game->id}}');
},
'json' // I expect a JSON response
);
clearStat();
});
</script>
<script src="{{ URL::asset('js/takeStats/genJavascript.js') }}"></script>
<script src="{{ URL::asset('js/takeStats/videoJS.js') }}"></script>
<script src="{{ URL::asset('js/takeStats/dataJS.js') }}"></script>
</body>
</html>
这是控制器方法:
public function loadStatList($id) {
$userType = Auth::user()->user_type;
if(Auth::check() && Game::where('id', '=', $id)->exists() && ($userType == 'statistician' || $userType == 'admin')) {
$game = Game::find($id);
$players = $game->team->users->where('user_type', 'player');
$stats = Stat::orderBy('video_timestamp', 'desc')->where('game_id', $game->id)->get();
$statMeta = Stat_Meta::all()->where('type', 'recorded');
return view('partials.statList', compact('game', 'players', 'stats', 'statMeta'));
} else {
abort(404);
}
}
我可能会遗漏一些东西,但我认为这会做我想要实现的目标。
解决方案
我想通了!感谢@Get Off My Lawn 给了我一点提示,我不能只使用@include。我继续研究如何预渲染 HTML,然后将其引入。实际上并不难。这里的想法是使用 JQuery 函数在点击提交时执行 AJAX POST,然后使用 .done 获取新的完整网页。在你拥有之后(你可以 console.log 看看你当时正在使用什么,它将是整个网页)你可以从你执行的 .get 中获取你想要刷新的特定 div,然后坚持它在同一个div中。这是代码:
HTML/@包括:
<div id="statList">
@include('partials.statList')
</div>
AJAX/JQuery:
$('input#addStatButton').click( function() {
$.ajax({
type: 'POST',
url: '{{action("StatController@store")}}',
data: $('form#new_stat').serialize(),
})
.done(function(refresh) {
clearStat();
$.get('{{action("StatController@show", [$game->id])}}', function(data) {
var newData = $("#statList" , data)
$( "#statList" ).html( newData );
//console.log(newData);
});
});
});
我很高兴你们!
推荐阅读
- c# - 如何使用 c# 获取或设置自定义 appsetting.json
- javascript - 在 pdf-lib 中设置 Pdf 图像注释的链接
- r - R Shiny:从动态创建的存储桶列表中打印输出
- java - 从 XSD 生成类删除命名空间引用
- ios - 将数据从 ViewContoller 快速传递到 popOver ViewController
- php - PHP Laravel - 控制器不存在
- python - 长初始化方法的 Python 最佳实践
- reactjs - React 组件显示与给定不同的道具
- c++ - 编译 C++ 时如何检查 Raspberry Pico 指令
- java - 中间的TextView