通过Laravel 4中db的ajax将数据加载到视图中

时间:2013-07-21 17:20:14

标签: jquery laravel laravel-4

到目前为止,我有一个包含打印头输入框和按钮的用户视图。

我可以设法获取所选用户的ID并在单击按钮时显示它:

$('#load').bind('click', function(e)
{
   alert(selected);
});

现在,我想从数据库中检索所选用户的数据,并在“用户”视图中显示它。这是我的jQuery,路由和控制器:

var details = '<?php echo URL::to('details'); ?>';
$.getJSON(
    details, 
    function(data) 
    {
        $('#details').html(data);
    }
);

Route::get('details', 'HomeController@Details');

public function Details()
{
    $data = array('name' => 'Ste');
    return View::make('user')->nest('details', $data);
}

我在Laravel中阅读过多篇关于AJAX的文章,但我并没有接近这个工作 有没有人知道这样做的好教程还是我做了明显错误的事情?

3 个答案:

答案 0 :(得分:7)

我花了一段时间才弄清楚,但这就是我最终得到的结果 这只是返回一个基于通过jQuery ajax传递给控制器​​方法的单个值(userid)的数据库查询在视图中构造的html。 例如:用户使用Bootstrap Typeahead选择用户,然后(通过ajax)从数据库中获取用户的详细信息并显示。

AJAX:

var details = '<?php echo URL::to('details'); ?>';
$.ajax(
{
    url: details,
    type: 'GET',
    dataType: 'html',
    data: {id: selected}, 
}).done( 
    function(data) 
    {
        $('#details').html(data);
    }
);

控制器:

public function Details()
{
    $id = Input::get('id');
    $user = DB::table('Users')->where('UserID', $id)->get();
    $data = array('user' => $user);

    return View::make('details', $data);
}

视图:

@foreach($user as $person)
<label class="key">User ID</label>
<label class="data">{{ $person->UserID }}</label>

<label class="key">Person</label>
<label class="data">{{ $person->FullName, $person->Email, $person->WebSite }}</label>
@endforeach

说明:

  • 我的所有观点都是刀片模板。
  • 我的详细信息视图无法从其他模板继承(无扩展('master')),这会阻止视图工作(不知道为什么)。
  • 我只会返回1条记录,我使用@foreach访问数组并将每个元素转换为对象(可能有更好的方法)。

答案 1 :(得分:3)

当你使用geJson时,你期待一个json响应,所以你需要使用$ .ajax()代替。

另一种解决方案是返回

return Response::json(['view' => View::make('user')->nest('details', $data)]);

然后

$.getJSON(
    details, 
    function(data) 
    {
        $('#details').html(data.view);
    }
);

答案 2 :(得分:1)

只是添加SteB所说的内容。要不使用@foreach,如果您只需要/需要1条记录,则应该这样做:

 $user = DB::table('Users')->where('UserID', $id)->first(); 

然后在您的视图中,您应该能够直接引用$ user而不需要@foreach循环。这是一种更好的方法,因为它是您正在检索的一条记录。