【问题标题】:Load data into view via ajax from db in Laravel 4通过 ajax 从 Laravel 4 中的 db 将数据加载到视图中
【发布时间】:2013-07-20 10:32:32
【问题描述】:

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

我可以设法获取所选用户的 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 的文章,但还没有接近让它发挥作用。
有谁知道这样做的好教程,还是我做错了什么?

【问题讨论】:

  • 您是否遇到任何错误?运行您的应用程序时会发生什么?
  • 我认为 $.getJSON 用于使用 GET HTTP 请求从服务器加载 JSON 编码的数据,但您发送的是 HTML/TEXT 数据

标签: jquery laravel laravel-4


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    我花了一段时间才弄清楚,但这就是我最终得到的结果。
    这只是根据通过 jQuery ajax 传递给控制器​​方法的单个值(用户 ID)从数据库查询中返回在视图中构造的一些 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 访问数组并将每个元素转换为一个对象(可能有更好的方法)。

    【讨论】:

      【解决方案3】:

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

      另一种解决方法是返回

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

      然后

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

      【讨论】:

      • 如果我返回 "return Response::json(array('view' => ''));"从我的控制器中,我可以让输入框出现,但只要我使用“return Response::json(array('view' => View::make('details', data)));”我什么也没得到,知道为什么吗?
      • Response::json(array('view' => View::make('details', $data)));您忘记将 $ 添加到变量数据中
      • 对不起,这是一个错字,我实际上得到了“return Response::json(array('view' => View::make('details', $data)));”。
      • @SteB - 我意识到这是一个稍晚的响应,但是在执行return Response::json(array('view' =&gt; View::make('details', $data))); 时您什么也得不到的原因是因为 View::make 返回一个对象,而不仅仅是内容。要直接返回视图,可以简单地通过:return View::make('details', $data); 完成,然后将 jQuery 中的 data 放入 HTML(而不是 data.view)。希望有帮助!
      猜你喜欢
      • 2017-01-17
      • 1970-01-01
      • 1970-01-01
      • 2016-11-16
      • 2019-06-30
      • 1970-01-01
      • 2014-09-08
      • 2018-02-19
      • 1970-01-01
      相关资源
      最近更新 更多