如何调用ajax从数据库中检索数据

Posted

技术标签:

【中文标题】如何调用ajax从数据库中检索数据【英文标题】:How to call ajax to retrieve data from database 【发布时间】: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

【问题讨论】:

【参考方案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/

【讨论】:

以上是关于如何调用ajax从数据库中检索数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 Jquery、AJAX 和 PHP 从 MySQL 数据库中检索数据

jquery-无法从我通过ajax调用获得的对象类型响应中检索数据

从控制器检索数据并返回 ajax 调用失败

使用 Jsonp 进行 $.ajax 调用后无法在 Jquery 中检索数据

从通过 jQuery/jQueryMobile 中的 AJAX 调用检索到的 JSON 数据正确设置变量

在 codeigniter 中使用 AJAX 从视图调用控制器函数并从 db 检索行