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(); 
    }); 
} 
+0

可以使用$ .ajax或$ .get或更多来扩展?当然,我想添加一个微调。但大多数情况下,他想成为扩展,这可能是一个不好的方法。 – bradley546994

+0

这是要走的路,但是你应该用JSON返回一个呈现的视图:'$ html = view('partials.table',$ data) - > render(); return response() - > json(compact('html'));'。 – JasonK

+0

@JasonK然后我不能使用'jQuery.load()'! – Webinan

答案是肯定的,你可以。 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')); 
     } 
} 

完蛋了,你的刀“容器”将现点击按钮时重新加载,并且对正在渲染的集合所做的任何更改都应该更新,而无需重新加载页面。

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