【问题标题】:How to call ajax to retrieve data from database如何调用ajax从数据库中检索数据
【发布时间】:2016-08-16 23:50:35
【问题描述】:

我已经构建了一个 laravel 应用程序。我想在其中使用日期范围搜索数据。这里我使用控制器,在调用控制器后,数据被检索并重定向到同一页面。这里有像页面加载这样的情况。但是我不想加载整个页面。如果我想使用 ajax 来调用控制器,则只调用该特定控制器并且没有重定向。我如何使用 Ajax 来做到这一点?

这是我的控制器:

public function reportByDate(Request $request)
{
     $revenue = DB::table('fees')
        ->join('courses', 'courses.id', '=', 'fees.course_id')
        ->join('users', 'courses.id', '=', 'users.course_id')            
        ->where('users.completed_status', '=', 1)
        ->sum('fee');

        $startDate = $request->Input(['sdate']);
        $finshDate=$request->Input(['edate']);


     $input = DB::table('fees')->join('courses', 'fees.course_id', '=','courses.id')
        ->join('users', 'users.course_id', '=', 'courses.id')
        ->where('users.completed_status', 1)
        ->whereBetween('users.date', [$startDate, $finshDate])
        ->groupBy('fees.course_id')
        ->selectRaw('SUM(fee) as fee, courses.name')
        ->get();


     return view('revenueDetails',['revenue'=>$revenue],['input'=>$input]);
}

这是查看页面:

@extends('layouts.master')
@section('title')
Revenue Details
@endsection
@section('content')

<div class="container">
<h3> Revenue Details </h3>
</br>
</br>

  {!! Form::open(array('route' => 'reportByDate','class'=>'form-horizontal','method'=>'POST'))  !!}
  {!! Form::token(); !!}
  {!!   csrf_field() ; !!} 
          <div class="form-group">
              <label> Start Date</label>  
              <input type="date" name="sdate" class="form-control" >
          </div>
          <div class="form-group">
              <label> End Date</label>  
              <input type="date" name="edate" class="form-control" >
          </div>

          <button type="submit" class="btn btn-default">Submit</button>
    {!! Form::close() !!}



<h4>Total Revenue: {{$revenue}}</h4></br>
</br>

      <table  class="table table-striped table-bordered"  id="example">
        <thead>
          <tr>
            <td>Serial No</td>
            <td>Course Name</td>            
            <td>Course Revenue</td>                      
          </tr>
        </thead>
        <tbody>
      {{--    {{dd($input)}} --}}
          <?php $i=1; ?>
         @foreach($input as $row)

          <tr>
            <td>{{$i}}</td>
            <td>{{$row->name}}</td>
            <td>{{$row->fee}}</td>



          </tr>
            <?php $i++; ?>     
        @endforeach


        </tbody>


      </table>
        <li><a href="{{ route('userDetails') }}">See the User Details</a></li>
    </div>
@endsection

【问题讨论】:

    标签: php jquery ajax laravel laravel-5.2


    【解决方案1】:

    您可以使用 json() 帮助器从控制器返回数据,而不是加载视图:

    在您的控制器中:

    return response()->json([
        'revenue' => $revenue,
        'input'   => $input
    ], 200);
    

    ajax 调用的示例:

    $.ajax({
        url: "path/to/resource",
        data: { sdate: "foo", edate: "bar", token: "{{ csrf_token() }}",
        dataType: "json"
    }).done(function(data) {
    
       // do something like diplay data;
    
    }).fail(function(jqXHR, responseText) {
    
       // something went wrong
    });
    

    【讨论】:

      【解决方案2】:

      您应该返回 json 响应并在 ajax-callback 函数中呈现您的 html。 使用 laravel 很简单。而不是这个字符串 "return view('revenueDetails',['revenue'=>$revenue],['input'=>$input]);" 使用这个“return response()->json(['revenue'=>$revenue,'input'=>$input]);”

      你可以在这里阅读如何做 ajax-request http://api.jquery.com/jquery.ajax/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-05
        • 2017-05-18
        • 2015-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-11
        相关资源
        最近更新 更多