2016-07-26 21 views
0

Standardmäßig aktualisiert die Laravel Paginierung die Seite jedes Mal. Ich will nicht diesePaginierung Laravel AJAX?

public function getPaginate($n) 
    { 
     return $this->model->with('professional') 
     ->orderBy('extras.created_at', 'desc') 
     ->paginate($n); 
    } 

In der Steuerung geschehen:

$extras = $this->extraRepository->getPaginate(3); 
$links = $extras->render(); 

Und ich $link zur Ansicht schicken.

<div class="pagination">{!! $links !!}</div> 
      </div> 
     </div> 

     <div class="row"> 
      <div class="small-12 columns"> 
       <ul class="large-block-grid-3 medium-block-grid-2 small-block-grid-1"> 
       @if(empty($extras)) 
        <p class="empty-notice">Sorry, no extra available at the moment. Come back later</p> 
       @else 
        @foreach ($extras as $extra) 
        <li class="extra-available">@include('user.card', ["description" => $extra->professional->company_name." in ". 
                   $extra->type. 
                   ' for '.$extra->date.' at '.$extra->date_time, 
               "title" => $extra->professional->company_name, 
               "image" => asset("../resources/assets/images/extra-card-example.png"), 
               "id" => $extra->id]) 
        </li> 
        @endforeach 
       @endif 
       </ul> 
      </div> 
     </div> 

Ich habe versucht, wie so eine AJAX-Anforderung zu implementieren:

$(".pagination a").click(function(e){ 
    e.preventDefault(); 
    var url = $(this).attr('href'); 
    //alert(url); 
    $.ajax({ 
     url: url, 
     type: "GET", 
     success: function(data){ 
      $('.extra-available').html(data); 
     } 
    }); 
}); 

aber es gibt mir eine ganze html doc, möchte ich genau das, was in .extra-available ist.

Irgendwelche Ideen?

+0

Wenn Sie jemals mit [Tables mit serverseitigen] versuchen (https://datatables.net /examples/data_sources/server_side.html), lassen Sie mich bitte wissen, wie Sie es gemacht haben. Es funktioniert auch mit [bootstrap styling] (https://datatables.net/examples/styling/bootstrap.html). – Pathros

Antwort

3

Ich denke, es ist besser, API vorzubereiten, um von Ihrem AJAX im JSON-Format aufgerufen zu werden. Die json return ist sehr nützlich, um paginate zu tun. Sie erhalten folgende Daten (in Laravel 5.2).

{ 
    "total": 18, 
    "per_page": 15, 
    "current_page": 1, 
    "last_page": 2, 
    "next_page_url": "http://example.com/products?page=2", 
    "prev_page_url": null, 
    "from": 1, 
    "to": 15, 
    "data": [] // a list of your data here 
} 

Ihr API-Controller wird so aussehen. Verwenden Sie nicht die $n. Laravel wird die aktuelle Seite aus dem page GET-Parameter

$data = Model::orderBy('extras.created_at', 'desc')->paginate(); 
return response()->json($data); 

So Ihres Ajax-Code erhalten kann, die nächsten Seitendaten in den next_page_url basierend nennen, sowie die vorherige Seite mit prev_page_url, wenn es vorhanden ist. Alles über Paging gibt es einschließlich der gesamten Aufzeichnungen, diese aktuelle Seite und Einträge gesamt Anzeige in Seite

+0

Wie löst es mein Problem? Ich möchte nicht, dass die Seite aktualisiert wird! –

+0

ja sicher wird es nicht aktualisieren, Sie werden nur das 'next_page_url' in Ihrem Ajax aufrufen, dann füllen Sie die JSON-Daten in Ihre Tabelle oder View mit jquery http://StackOverflow.com/questions/17724017/using-Jquery-to- Build-Tabelle-Zeilen-von-Ajax-Responsejson – xmhafiz

0

Versuchen:

$(document).on('click', '.pagination a', function (e) { ...