Laravel在ajax之后刷新数据
他目前正在研究必须过滤表中数据的代码。 Ajax将调用链接并获得答案(json)结果。但是,我遇到了一个问题。我必须以某种方式呈现表格,并且我不想通过追加等来执行此操作。Laravel在ajax之后刷新数据
我可以以某种方式再次生成视图或刀片文件吗?
默认视图是DefController @ index,但ajax使用URL,其中控制器是DefController @ gettabledata。
public function gettabledata($id){
return response()->json(Def::find($id)->getallmy->all());
}
你可以把部分对应的表模板在一个单独的.blade.php
文件,@include
在主布局。
main.blade.php
:
<html>
...
<body>
<div class="table-container">
@include('table')
</div>
</body>
...
而且
table.blade.php
:
<table>
@foreach($rows as $row)
<tr>
<td> $row->title ... </td>
</tr>
@endforeach
</table>
通过这种方式,你可以用一个简单的jQuery $('div.table-container').load(url)
和你的服务器上只呈现,并回应说,部分为html串。 return view('table', $data)
的Javascript:
function refreshTable() {
$('div.table-container').fadeOut();
$('div.table-container').load(url, function() {
$('div.table-container').fadeIn();
});
}
答案是肯定的,你可以。 Webinan当然向您指出了正确的方向。这种方法稍有不同。
首先,您需要一个单独的表格视图。对于HTML标记一个很简单的例子:var $request = $.get('www.app.com/endpoint');
:
<div class="table-container">
@include('partials.table') // this view will be async loaded
</div>
我们通过调用与jQuery的服务器(可以用JavaScript做太)使用shorthand ajax function开始。您也可以将任何数据传递给后端的控制器。
现在在服务器端,你的控制器中,渲染和返回表格视图:
class EndpointController extends Controller
{
/**
* Returns a rendered table view in JSON format.
*
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function ajax(Request $request)
{
$html = view('partials.table', compact('view'))->render();
return response()->json(compact('html'));
}
}
如果一切工作中,done
回调将被触发。只需抓取html变量并将其设置为表格容器的内容即可。
function renderTable() {
var $request = $.get('www.app.com/endpoint'); // make request
var $container = $('.table-container');
$container.addClass('loading'); // add loading class (optional)
$request.done(function(data) { // success
$container.html(data.html);
});
$request.always(function() {
$container.removeClass('loading');
});
}
希望这有助于!
要更新和更改网页内容,而无需重新加载页面的Laravel 5.4 i执行以下操作:
首先在被称为“意见”文件夹中创建刀片视图“container.blade.php”将包含以下代码(在这种情况下从包装保镖渲染能力的名单(但你可以使用@foreach上任何你喜欢的Laravel集合)选择框:
<select>
{{ $abilityList = Bouncer::role()::where('name','admin')->first()->getAbilities()->pluck('name') }}
@foreach ($abilityList as $ab)
<option value="{{ $ab }}">{{ $ab }}</option>
@endforeach
</select>
一下添加到您主刀文件(如home.blade。PHP)确保使用一个div一个id,你可以参考一下:
<div id="abilityListContainer">
@include('container')
</div>
现在你的主刀文件(如home.blade.php)添加一个按钮,将触发将与Laravel通讯功能控制器:
<input type="button" value="reload abilities" onClick="reloadAbilities()"></input>
然后添加JavaScript来此函数加载生成HTML到您的div容器(注意旁边的“不用彷徨”中的“/更新能力”路线 - 这是一个Laravel路线,我们将设置在下一步中):
var reloadAbilities = function()
{
var $request = $.get('/updateAbility', {value: "optional_variable"}, function(result)
{
//callback function once server has complete request
$('#abilityListContainer').html(result.html);
});
}
现在我们为这个动作设置Laravel路由,它引用我们的控制器并调用函数“updateAbilityContainer”。所以编辑/路由/网络/ php文件有以下途径:
Route::get('updateAbility', array('as'=> 'updateAbility', 'uses'=>'[email protected]'));
最后在app/HTTP /控制器使文件“abilityController.php”(你也可以使用“PHP工匠制作:控制器abilityController “)。现在,添加这个函数来处理的变化,生成HTML,并将其返回给JavaScript函数(注意,您可能还需要使用的命名空间以及):
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Input;
class AbilityController extends Controller
{
public function updateAbilityContainer()
{
// use this if you need to retrieve your variable
$request = Input::get('value');
//render and return the 'container' blade view
$html = view('container', compact('view'))->render();
return response()->json(compact('html'));
}
}
完蛋了,你的刀“容器”将现点击按钮时重新加载,并且对正在渲染的集合所做的任何更改都应该更新,而无需重新加载页面。
希望这会填补其他答案中留下的一些空白。我希望这个对你有用。
可以使用$ .ajax或$ .get或更多来扩展?当然,我想添加一个微调。但大多数情况下,他想成为扩展,这可能是一个不好的方法。 – bradley546994
这是要走的路,但是你应该用JSON返回一个呈现的视图:'$ html = view('partials.table',$ data) - > render(); return response() - > json(compact('html'));'。 – JasonK
@JasonK然后我不能使用'jQuery.load()'! – Webinan