当我更改路线时,Laravel ajax 搜索不起作用
Posted
技术标签:
【中文标题】当我更改路线时,Laravel ajax 搜索不起作用【英文标题】:Laravel ajax search not working when I change the route 【发布时间】:2020-11-07 03:27:49 【问题描述】:我目前正面临 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);
【问题讨论】:
【参考方案1】:如果您已经在使用命名路由 ->name('associate.search')
,请尝试通过名称获取路由 URL:
url: ' route("associate.search") ',
【讨论】:
这虽然是个好建议,但也解决不了问题。【参考方案2】:路由 URI
/associates/search
与 resource URI 冲突。
为什么?
因为您使用 URI associates
创建了一个 resource 路由:
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');
【讨论】:
以上是关于当我更改路线时,Laravel ajax 搜索不起作用的主要内容,如果未能解决你的问题,请参考以下文章