我想制作一个搜索程序来从大数据表中获取数据。用户可以从列,代码/代码和名称中搜索数据(每个数据都有1个代码/ kode)。如果用户单击搜索按钮,使用AJAX向服务器发送请求,则客户端获取结果并将其显示在表中。
这是我的观点:
<div class="modal-body">
<div class="form-inline form-inline" style="margin-bottom: 10px">
{!! Form::select('jenis-select',['Kode BU','Nama BU'],null,['class' => 'form-control']) !!}
{!! Form::text('value-select','',['class' => 'form-control']) !!}
<button type="button" id="cari-bu" class="btn btn-default">Cari</button>
</div>
<table class="table">
<thead>
<tr>
<th>Kode BU</th>
<th>Nama BU</th>
</tr>
</thead>
<tbody id="hasil-cari"></tbody>
</table>
</div>
搜索结果将显示在<tbody>
上,地址为id="hasil-cari"
这是我的ajax:
$(document).ready(function () {
$.ajaxSetup({
headers: {'X-CSRF-Token': $('meta[name=_token]').attr('content')}
});
$('#cari-bu').click(function () {
$.ajax({
url: 'select_bu',
type: 'post',
data: {'_token': $('input[name=_token]').val(),
'jenis': $('select[name=jenis-select]').val(),
'value': $('input[name=value-select]').val()
},
success: function (data) {
$('#hasil-cari').html(data);
}
});
});
});
这是处理AJAX的控制器:
public function postSelect() {
if (Request::ajax()) {
$input = Input::all();
if ($input['jenis'] == 0) {
$hasil = Daftarbu::where('kodebu', $input['value'])->get();
} elseif ($input['jenis'] == 1) {
$hasil = Daftarbu::where('namabu','LIKE','%'.$input['value'].'%')->get();
}
$hasilAkh = '<tr>';
foreach ($hasil as $dHasil){
$hasilAkh .= '<td>'.$dHasil->kodebu.'</td><td>'.$dHasil->namabu.'</td>';
}
$hasilAkh .= '</tr>';
return $hasilAkh;
}
}
我的路线:
Route::post('select_bu','Pelayanan@postSelect');
我已将此meta
置于<head>
代码
<meta name="_token" content="{!! csrf_token() !!}"/>
使用该代码我会得到500内部错误。有谁能找到问题?
答案 0 :(得分:1)
在routes.php
Route::post('/select_bu',['as'=>'select_bu','uses'=>'Pelayanan@postSelect']);
在您的Javascript中:
$(document).ready(function () {
$.ajaxSetup({
headers: {'X-CSRF-Token': $('meta[name="_token"]').attr('content')}
});
$('#cari-bu').click(function () {
$.ajax({
url: '{!! route('select_bu') !!}',
type: 'post',
data: 'jenis': $('select[name="jenis-select"]').val(),
'value': $('input[name="value-select"]').val()
},
success: function (data) {
$('#hasil-cari').html(data);
}
});
});
});
您已将$.ajaxSetup({})
加载到您的ajax设置中。没有必要将它作为<form>
的一部分包含在内,或作为一个参数发送,作为ajax对象密钥对的一部分发送请求。最有可能的错误是由于两个_token
值在到达VerifyCsrfToken
中间件后相互冲突而发生的,因为_token
引用的$('input[name=_token]')
似乎没有得到匹配?
在那个注释中,应该写出选择器:
$('input[name="_token"]')
我已在我提供的代码中更正此内容。
了解更多信息:
https://laravel.com/docs/5.2/routing#named-routes
答案 1 :(得分:0)
转储您的routes.php
,可能是您设法避免加载包含CSRF检查的web
中间件。
在5.2中,每次请求都只执行维护中间件。其他所有内容如cookie,会话和CSRF都已移至Web中间件组。
您可能需要以下内容:
Route::group(['middleware' => 'web'], function () {
// ...
});
此外,为我们运行并转储生成的路线php artisan route:list
并显示这些结果。
最后,您是否可以仔细检查您的HTML表单实际上是否格式正确(没有双关语)。您可能没有任何开放form
标记,例如:
{!! Form::open(['url' => 'foo/bar', 'method' => 'post']) !!}
{{-- Form::select --}}
{!! Form::close() }}
Relevant documentation Form
,如果没有记错的话。