将数据拉回刀片服务器而无需刷新

时间:2018-08-01 11:19:35

标签: php mysql ajax laravel

因此,我通常对laravel还是陌生的,我所拥有的是一个搜索表单,该表单从数据库中提取信息,然后在同一页面上对其进行调用,目前它的工作方式类似于重定向,但我想知道如何做到这一点而无需刷新页面

这是刀片:

 <form class="form-horizontal" role="form" id="policy-documents-search-form" action="/search" method="POST">
        {{ csrf_field() }}
        <fieldset>

            <div class="form-group">
                <label for="username" class="col-sm-6 control-label">Enter your policy number</label>
                <div class="col-sm-8">
                    <input type="text" name="ordernumber" id="ordernumber" class="form-control"/>
                    <span class="text-danger">{{ $errors->first('ordernumber') }}</span>
                </div>
            </div>

                @if (session('error'))
                    <div class="alert alert-danger">{{ session('error') }}</div>
                @endif

            <div class="form-group">
                <div class="col-sm-offset-4 col-sm-8">
                    <button type="submit" class="btn btn-primary" id="search-button">Search</button>
                </div>
            </div>

             <div class="form-group">
                    <div class="container">
                    @if(isset($order))
                    <h2>Your Policy Details</h2>
                    <table>
                        <thead>
                            <tr>
                                <th>Name</th>
                                <th>Claims Telephone</th>
                                <th>Policy Wording</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td>{{ @$order->scheme->Description }}</td>
                                <td>{{ @$order->scheme->ClaimsTelephone1 }}</td>
                                <td><a href="{{ @$order->scheme->PolicyURL }}">Policy Wording </a></td>
                            </tr>
                        </tbody>
                    </table>
                    @endif
                </div>


                </div>
            </div>


        </fieldset>
    </form>

这是控制器功能:

public function search(Request $request) {

    if ($this->validate($request, [
        'ordernumber' => 'string|min:8|max:16',
    ], [
        'ordernumber.string' => ' Please enter a full order number. This will either be 8, 12 or 16 characters long and include a 2 letter prefix.',
        'ordernumber.min' => ' Please enter a full order number. This will either be 8, 12 or 16 characters long and include a 2 letter prefix.',
        'ordernumber.max' => ' Please enter a full order number. This will either be 8, 12 or 16 characters long and include a 2 letter prefix.',
    ]));

        try {
        $order = Order::findOrFail(decodeFullOrderNumber($request->ordernumber));
        } catch (ModelNotFoundException $exception) {
            return back()->withError('We could not find this policy number in our system, please try again')->withInput();
        }
        return view('policy_wording', compact('order'), [
            'title' => "Policy Wording Results",
        ]);
}

这是路线:

 Route::get('/policy-wording', 
'PolicyWordingController@policyWordingPage');
 Route::any('/search', 'PolicyWordingController@search');

2 个答案:

答案 0 :(得分:0)

要使用AJAX进行此操作,您需要一个前端解决方案,例如Axios或jQuery,以便发出AJAX请求。

发送请求后,您可以像处理常规POST请求一样处理该请求,然后返回JSON或html。

对于JSON,这非常简单,默认情况下,您返回的每个数组或模型都会转换为JSON。

但是,要返回视图,您需要使用render方法。此方法将“渲染”视图并返回给您相应的HTML。

所以,而不是:

return view('policy_wording', compact('order'), [
    'title' => "Policy Wording Results",
]);

您应该有类似的东西:

return view('policy_wording', compact('order'), [
    'title' => "Policy Wording Results",
])->render(); //notice the render method here

那么您要做的就是在前端处理响应。

编辑验证信息

如果验证失败,它将返回422错误(无法处理的实体),因此您可以像处理其他任何ajax错误一样处理它。

答案 1 :(得分:0)

首先,我建议为此目的使用Vuejs,这样您就无法考虑如何重建表等了。

在服务器端,您要做的就是返回搜索结果(如果是ajax)

if ($request->isXmlHttpRequest())
    return $order->toArray();

return view()之前