2017-10-20 92 views
0

我有一個索引頁,我使用分頁列出了一些醫院。Laravel在javascript中的分頁對象

我也有一個搜索欄,我可以寫一個醫院的名稱和列表應該「實時」更新與AJAX請求。

我的問題是,我無法通過javascript重新使用laravel分頁對象來創建分頁。我不想通過純JavaScript/jQuery來管理它。目前,我正在創建返回的所有對象的列表。但是,如果沒有分頁(所以列表可以是巨大的)

所以在我的控制器我有這個功能

public function index() 
{ 
    $hospitals = Hospital::orderBy('name')->paginate(15); 
    return view('admin.hospitals.show', compact('hospitals')); 
} 

在我看來(/admin/hospitals/show.blade.php),我用它來創建一個分頁(我想在Ajax響應再使用此)

<ul> 
@foreach($tasks as $task) 
    <li>{{ $task->name }}</li> 
@endforeach 
</ul> 
{{ $tasks->links() }} 

這給我的這個結果

enter image description here

當在搜索欄中鍵入,這AJAX被稱爲

$.ajax({ 
    type: "GET", 
    url: '/admin/hospitals/search/'+ $('#hospital_search').val().trim(), 
    success: function (data) 
    { 
     if (data.hospital.length == 0) 
     { 
      $('#hospital_result').html('<div class="alert alert-warning">No hospitals found</div>'); 
     } 
     else 
     { 
      //Actual code that give me the listing without pagination 
      //Would be nice if I could do something like {{ data.hospital->links() }} 
      var html = '<ul>'; 
      $.each(data.hospital , function(i , hospital){  
       html += '<li><a href="/admin/hospitals/'+ hospital.id +'"><b>' + hospital.name + '</b></a></li>';}); 
      html += '</ul>'; 
      $('#hospital_result').html(html); 
     } 
    }, 
    error: function (data) 
    { 
     alert('Error:', data); 
    } 
}); 

而且我search功能

public function search($term = null) 
{  
    if(!$term) 
    { 
     $hospital = Hospital::orderBy('name')->get(); 
    } 
    else 
    { 
     //Get match on name 
     $hospital = Hospital::where('name' , 'LIKE' , '%'.$term.'%') 
         ->orderBy('name') 
         ->get(); //Should be replaced by ->paginate(15) when JS will be replaced 
    } 

    //Return as JSON 
    return response()->json(['success' => true, 'hospital' => $hospital]); 
} 

如何將data對象上使用->links()在Ajax響應? 或者我應該改變我的邏輯並在ajax請求後加載特定視圖?

回答

0

->links()方法生成HTML代碼,所以你可以做的就是將它返回到它自己的變量中。

return response()->json([ 
    'success' => true, 
    'hospital' => $hospital 
    'pagination' => $hospital->links() 
]); 

進行另一種方式是通過JSON返回表html和填充容器的內容與響應

return response()->json([ 
    'success' => true, 
    'html' => view('hospitals.list')->render() 
]); 
+0

傳遞'$醫院 - >鏈接()'的JavaScript,我沒工作。創建列表視圖並將呈現的視圖傳遞給js是解決方案,謝謝! – Raccoon