ajax后Laravel刷新数据

新手上路,请多包涵

他目前正在编写必须过滤表中数据的代码。 Ajax 将调用该链接并获取带有答案的响应 (json) 结果。但是,我遇到了一个问题。我必须以某种方式呈现表格,我不想通过追加等方式来做到这一点。

我能以某种方式再次生成视图或刀片文件吗?

默认视图是 DefController@index 但 ajax 使用 url 哪个控制器是 DefController@gettabledata。

 public function gettabledata($id){

    return response()->json(Def::find($id)->getallmy->all());

}

原文由 bradley546994 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 274
2 个回答

您可以将模板中对应于表格的部分放在单独的 .blade.php 文件中,并将 @include 放在主布局中。

main.blade.php :

 <html>
...
<body>
  <div class="table-container">
  @include('table')
  </div>
</body>
...

table.blade.php :

 <table>
  @foreach($rows as $row)
    <tr>
      <td> $row->title ... </td>
    </tr>
  @endforeach
</table>

通过这种方式,您可以使用一个简单的 jQuery $('div.table-container').load(url) 并且在您的服务器上只需将该部分作为 html 字符串呈现和响应。 return view('table', $data)

Java脚本:

 function refreshTable() {
  $('div.table-container').fadeOut();
  $('div.table-container').load(url, function() {
      $('div.table-container').fadeIn();
  });
}

原文由 Positivity 发布,翻译遵循 CC BY-SA 3.0 许可协议

答案是肯定的,你可以。 Webinan 无疑为您指明了正确的方向。这种方法略有不同。

首先,您需要一个单独的表视图。 HTML 标记的一个非常基本的示例:

 <div class="table-container">
    @include('partials.table') // this view will be async loaded
</div>

我们首先使用 jQuery 调用服务器(也可以使用 Javascript 完成),使用 简写的 ajax 函数var $request = $.get('www.app.com/endpoint'); 。您还可以将任何数据传递到后端的控制器。

现在在服务器端,在您的控制器中,呈现并返回表视图:

 class EndpointController extends Controller
{
    /**
     * Returns a rendered table view in JSON format.
     *
     * @param  Request $request
     * @return \Illuminate\Http\JsonResponse
     */
    public function ajax(Request $request)
    {
        $html = view('partials.table', compact('view'))->render();

        return response()->json(compact('html'));
    }
}

如果一切顺利,将触发 done 回调。只需获取 html 变量并将其设置为表容器的内容。

 function renderTable() {
    var $request = $.get('www.app.com/endpoint'); // make request
    var $container = $('.table-container');

    $container.addClass('loading'); // add loading class (optional)

    $request.done(function(data) { // success
        $container.html(data.html);
    });
    $request.always(function() {
        $container.removeClass('loading');
    });
}

希望这可以帮助!

原文由 JasonK 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题