Laravel在ajax之后刷新数据

他目前正在研究必须过滤表中数据的代码。 Ajax将调用该链接并获得响应(json)结果。 但是,我遇到了一个问题。 我必须以某种方式呈现表格,我不想通过追加等来做到这一点。

我可以以某种方式再次生成视图或刀片文件?

默认视图是DefController @ index但是ajax使用url哪个控制器是DefController @ gettabledata。

public function gettabledata($id){ return response()->json(Def::find($id)->getallmy->all()); } 

您可以将模板中的部件放在单独的.blade.php文件中与表对应,并将@include放在主布局中。

main.blade.php

  ...  
@include('table')
...

table.blade.php

  @foreach($rows as $row)  @endforeach 
$row->title ...

通过这种方式,您可以使用简单的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标记的一个非常基本的示例:

 
@include('partials.table') // this view will be async loaded

我们首先使用简写ajax函数使用jQuery调用服务器(也可以使用Javascript完成): var $request = $.get('www.app.com/endpoint'); 。 您还可以将任何数据传递到后端的控制器。

现在在服务器端,在您的控制器中,渲染并返回表视图:

 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中重新加载页面而更新和更改页面内容,请执行以下操作:

首先在名为“container.blade.php”的“views”文件夹中创建刀片视图,它将包含以下代码(在这种情况下是一个选择框,它从包Bouncer渲染一个能力列表(但你可以使用@在你喜欢的任何Laravel系列上预告:)

  

将此添加到主刀片文件(例如home.blade.php),确保使用带有id的div,您可以参考:

 
@include('container')

现在在您的主刀片文件(例如home.blade.php)上添加一个按钮,该按钮将触发与Laravel控制器通信的function:

  

然后为这个函数添加javascript,这会将生成的html加载到div容器中(注意“.get”旁边的“/ updateAbility”路径 – 这是我们将在下一步中设置的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”。 因此,编辑/ routes / web / php文件以具有以下路由:

 Route::get('updateAbility', array('as'=> 'updateAbility', 'uses'=>'AbilityController@updateAbilityContainer')); 

最后在app / Http / Controllers中创建文件“abilityController.php”(你也可以使用“php artisan make:controller 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')); } } 

多数民众赞成,当您单击按钮时,您的刀片“容器”将重新加载,并且您正在渲染的集合的任何更改都应该在不重新加载页面的情况下进行更新。

希望这填补了其他答案留下的一些空白。 我希望这个对你有用。