簡體   English   中英

Laravel在ajax之后刷新數據

[英]Laravel refresh data after 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

<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標記的一個非常基本的示例:

<div class="table-container">
    @include('partials.table') // this view will be async loaded
</div>

我們首先使用簡寫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系列上預告:)

<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),確保使用帶有您可以引用的ID的div:

<div id="abilityListContainer">
    @include('container')
</div>

現在在您的主刀片文件(例如home.blade.php)上添加一個按鈕,該按鈕將觸發與Laravel控制器通信的功能:

<input type="button" value="reload abilities" onClick="reloadAbilities()"></input>

然后為這個函數添加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'));
        }
}

多數民眾贊成,當您單擊按鈕時,您的刀片“容器”將重新加載,並且您正在渲染的集合的任何更改都應更新,而無需重新加載頁面。

希望這填補了其他答案留下的一些空白。 我希望這個對你有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM