【问题标题】:Laravel post + ajaxLaravel 发布 + ajax
【发布时间】:2018-09-07 05:42:42
【问题描述】:

我在使用 laravel 时遇到问题,我正在运行一个 SPA,我需要创建一个按类别搜索和过滤的表单。

我正在通过 POST 执行此操作,但我需要使用过滤器和 ajax 再次运行查询,以便页面不会重新加载。

但是我该怎么做呢?我只需要运行该查询并重新加载 div,ajax 部分还可以,但我不知道如何在不运行每个查询以“填充”页面内容的情况下仅运行该查询。

对不起,如果不够清楚,我的英语不太好。

感谢您的建议!

控制器:

public function index()
{
    $data['servicos']                   = DB::select('SELECT * FROM servicos WHERE ativo = 1 ORDER BY ORDEM ASC');
    $data['servicos_processo']          = DB::select('SELECT * FROM servicos_processo WHERE ativo = 1 ORDER BY ID ASC');
    $data['servicos_fun']               = DB::select('SELECT * FROM servicos_fun WHERE ativo = 1 ORDER BY ID ASC');
    $data['curriculum_historico']       = DB::select('SELECT * FROM curriculum_historico WHERE ativo = 1 ORDER BY ID DESC');
    $data['curriculum_educacao']        = DB::select('SELECT * FROM curriculum_educacao WHERE ativo = 1 ORDER BY ANO ASC');
    $data['curriculum_coding_skills']   = DB::select('SELECT * FROM curriculum_coding_skills WHERE ativo = 1 ORDER BY ID ASC');
    $data['curriculum_other_skills']    = DB::select('SELECT * FROM curriculum_other_skills WHERE ativo = 1 ORDER BY ID ASC');
    $data['curriculum_testimonials']    = DB::select('SELECT * FROM curriculum_testimonials WHERE ativo = 1 ORDER BY ID ASC');
    $data['certificados_last']          = DB::select('SELECT * FROM certificados WHERE ativo = 1 ORDER BY data_conclusao DESC LIMIT 9');
    return view('main', $data);
}

public function certificados()
{
    $nome = Request::input('filtro-certificados');
    $data['certificados_last']          = DB::select("SELECT * FROM certificados WHERE ativo = 1 AND nome LIKE '%{$nome}%' ORDER BY data_conclusao DESC LIMIT 9");
    return $data;
}

查看:

 <div class="latest-posts media-grid masonry" data-layout="masonry" data-item-width="340">

                @foreach($certificados_last as $certificado)
                <article class="hentry media-cell">
                    <div class="media-box">
                        <img src="images/certificados/{{$certificado->id}}.svg" style="padding:60px" alt="post-image">
                        <div class="mask"></div>
                        <a href="certificado/{{$certificado->id}}"></a>
                    </div>

                    <header class="media-cell-desc">
                            <span title="2013" class="date">
                                <span class="day">{{$certificado->dia_conclusao}}</span>{{$certificado->mes_conclusao}}</span>
                        <h3>
                            <a href="certificado/{{$certificado->id}}">{{$certificado->nome}}</a>
                        </h3>
                    </header>

                </article>
                @endforeach

            </div>

【问题讨论】:

  • 到目前为止你做了什么?显示你完成的控制器/模型/ajax..然后显示问题..
  • 你有一个只执行这个查询的 api 调用吗?你有一些代码吗?我建议你调用 api 并将结果交给客户端
  • @ZeroOne 刚刚添加了代码。我暂时没有ajax,我稍后再做

标签: sql ajax laravel post


【解决方案1】:

使用 axios、jQuery 或您选择的任何客户端发送发布请求。包括您的搜索和过滤参数。

在 Laravel 中,创建指向控制器方法的 post 路由。这个方法应该直接返回数据——不要返回视图。

例如:

public function ajaxSearch(Request $request)
{
    $data = User::where('name', $request->query);

    return $data;
}

然后,使用您的 JavaScript 替换或插入新数据。

  • 如果您还没有,请查看 Vue。

注意:Laravel 会自动将响应转换为 JSON。

使用done() 方法,就像使用 jQuery 时一样:

$.post( '/myRouteHere', { name: 'John', time: '2pm' })
    .done(function() {

        // insert / update data

    }).fail(function() {

        alert( "error" );

    });

【讨论】:

  • 谢谢!我做了更改,现在我得到了过滤后的 JSON。现在我需要替换内容,我去检查一下Vue。
  • 我如何“捕捉”这个函数返回的 JSON?
  • 你用的是jQuery还是axios?
  • 我正在使用 jQuery
  • 与其尝试在 cmets 中对其进行格式化,不如查看我的编辑答案。
猜你喜欢
  • 2014-06-08
  • 1970-01-01
  • 2019-12-29
  • 2017-10-20
  • 1970-01-01
  • 2015-06-19
  • 2016-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多