1

So far I have a User view that contains a typehead input box and a button.

I can manage to get the id of the selected user and display it when clicking on the button:

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

Now I want to retrieve the data for the selected user from the database and display it in the User view. Here is my jQuery, route and controller:

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);
}

I've read multiple articles of AJAX in Laravel but am no closer to getting this working.
Does anyone know of a good tutorial for doing this or am I doing something obviously wrong?

4

3 回答 3

7

我花了一段时间才弄清楚,但这就是我最终得到的。
这只是根据通过 jQuery ajax 传递给控制器​​方法的单个值(用户 ID)从数据库查询中返回在视图中构造的一些 html。
例如:用户使用 Bootstrap Typeahead 选择用户,然后(通过 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 访问数组并将每个元素转换为一个对象(可能有更好的方法)。
于 2013-07-27T20:04:15.043 回答
3

当您使用 geJson 时,您期望得到 json 响应,因此您需要使用 $.ajax() 来代替。

另一个解决方案是返回

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

接着

$.getJSON(
    details, 
    function(data) 
    {
        $('#details').html(data.view);
    }
);
于 2013-07-21T19:53:46.120 回答
1

只是为了补充 SteB 的说法。要不使用@foreach,如果您只有/需要 1 条记录,您应该这样做:

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

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

于 2013-10-30T01:59:57.760 回答