我想知道如何在成功时将laravel查询结果传递回我的ajax函数。我已经读过一些关于json编码的内容,但我对此感到困惑,并不是很熟悉json。
$('#userFilter').change(function(){
var selected = $('#userFilter').find(':selected').val();
var token = $('#token').val();
$.ajax({
type: 'POST',
url: '/admin_panel',
data: {
_token : token,
selected : selected,
},
success: function(data){
$('#usersViewBody').html(data);
}
})
});
function filterUsers(Request $request) {
$selected = $request->selected;
if ($selected == 0) {
$users = DB::table('users')->paginate(15);
} elseif ($selected == 1){
$users = DB::table('users')
->where('status', '=', '0')
->orWhere('status', '=', '1')
->paginate(15);
} else {
$users = DB::table('users')
->where('status', '=', '2')
->orWhere('status', '=', '3')
->paginate(15);
}
return $users;
<tbody id="usersViewBody">
@foreach($users as $user)
<tr>
<td><a data-uid="{{$user->id}}" class="openUserPanel" href="#tabUserInfo"> {{$user->name}}</a></td>
<td>{{$user->department}}</td>
<td>{{$user->position}}</td>
@if($user->status == 0)
<td class="userActive">Active</td>
@elseif($user->status == 1)
<td class="userOOO">On Leave</td>
@elseif($user->status == 2)
<td class="userInactive">Retired</td>
@else
<td class="userInactive">Terminated</td>
@endif
@if($user->status == 2 || $user->status == 3)
<td><button class="btn btn-xs btn-default payrollModalTrigger disabled" data-uid="{{$user->id}}">Update Payroll</button></td>
@else
<td><button class="btn btn-xs btn-default payrollModalTrigger" data-uid="{{$user->id}}">Update Payroll</button></td>
@endif
</tr>
@endforeach
</tbody>
</table>
</div>
<div class="text-center">
{{ $users->links() }}
</div>
答案 0 :(得分:1)
不是从控制器返回集合$users
,而是需要将view
返回给ajax,从而更改控制器方法的返回值
return $users;
到
return view('name of the view', compact('users'));
答案 1 :(得分:0)
首次加载页面时使用了Blade(即它在服务器上呈现),只有重新加载页面时才会再次运行,这与您尝试使用ajax进行对比,即与没有页面重新加载的服务器。
您在ajax成功调用中想要做的是使用javascript中表体内容的constrcut HTML以及从服务器响应中获得的数据。
这个包已经为你完成了所有繁重的工作https://github.com/yajra/laravel-datatables,当然,学习如何自己做这件事会很好!