因此,我通常对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');
答案 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()
之前