如何调用ajax从数据库检索数据
问题描述:
我已经构建了一个laravel应用程序。我想用日期范围搜索数据。在这里,我使用控制器,并在调用控制器后,数据被检索并重定向到相同的页面。这里有类似页面加载的情况。但我不想加载整个页面。而不是它,如果我想使用ajax调用控制器只会调用特定的控制器,并且没有重定向。我如何使用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
答
您可以使用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
});
答
您应该返回JSON响应和渲染你的HTML在Ajax的回调函数。 用laravel很简单。而不是这个字符串“return view('revenueDetails',['revenue'=> $ revenue],['input'=> $ input]);” 使用此“return response() - > json(['revenue'=> $ revenue,'input'=> $ input]);”
你可以阅读如何在这里做ajax请求http://api.jquery.com/jquery.ajax/