通过ajax将laravel查询结果传递给刀片

时间:2017-08-03 12:48:00

标签: ajax laravel

我想知道如何在成功时将laravel查询结果传递回我的ajax函数。我已经读过一些关于json编码的内容,但我对此感到困惑,并不是很熟悉json。

的Ajax

$('#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>

2 个答案:

答案 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,当然,学习如何自己做这件事会很好!