我目前在用ajax搜索时遇到问题,我认为这与路由有关,但是我不确定这是什么错误。也许现在编码还为时过早。
这有效
<script type="text/javascript">
$('#name').on('keyup',function(){
$value=$(this).val();
$.ajax({
type : 'get',
url : '{{ URL::to("/search") }}',
data:{'name':$value},
success:function(data){
$('tbody').html(data);
}
});
})
</script>
这不起作用
<script type="text/javascript">
$('#name').on('keyup',function(){
$value=$(this).val();
$.ajax({
type : 'get',
url : '{{ URL::to("/associates/search") }}', // Does not change if route name is used
data:{'name':$value},
success:function(data){
$('tbody').html(data);
}
});
})
</script>
路线如下
Route::resource('associates', 'AssociateController');
Route::get('/search','AssociateController@search');
Route::get('/associates/search', 'AssociateController@search')->name('associate.search');
控制器中的搜索方法
public function search(Request $request)
{
if($request->ajax())
{
$output="";
$associates=DB::table('associates')->where('name','LIKE','%'.$request->name.'%')->limit(10)->get();
if($associates)
{
foreach ($associates as $key => $associate) {
$output.='<tr>'.
'<td>'.$associate->id.'</td>'.
'<td>'.$associate->name.'</td>'.
'</tr>';
}
return Response($output);
}
}
}
答案 0 :(得分:1)
路由URI
/associates/search
与资源 URI冲突。
为什么?
因为您使用URI associates
创建了资源路由:
Route::resource('associates', 'AssociateController');
此资源专用于:
Verb Path Action Route Name
GET /associates index associates.index
GET /associates/create create associates.create
POST /associates store associates.store
GET /associates/{associates} show associates.show
GET /associates/{associates}/edit edit associates.edit
PUT|PATCH /associates/{associates} update associates.update
DELETE /associates/{associates} destroy associates.destroy
这就是/associates/search
与该资源URI冲突的原因。
如何解决?
您需要,只需分别向该方法添加路由,在之前注册资源:
Route::get('/associates/search', 'AssociateController@search')->name('associate.search');
Route::resource('associates', 'AssociateController');
答案 1 :(得分:-1)
如果您已经在使用命名路由->name('associate.search')
,请尝试通过其名称获取路由URL:
url: '{{ route("associate.search") }}',