当我更改路线时,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】:

如果您已经在使用命名路由 -&gt;name('associate.search'),请尝试通过名称获取路由 URL:

url: ' route("associate.search") ',

【讨论】:

这虽然是个好建议,但也解决不了问题。【参考方案2】:

路由 URI /associates/searchresource 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 搜索不起作用的主要内容,如果未能解决你的问题,请参考以下文章

路线存在但不起作用,删除的路线仍然有效 Laravel

路线正确时,Laravel“控制器不存在”

Laravel 快速入门指南路线不起作用

Laravel 5.3路线不起作用

使用ajax调用的角度保存变量到laravel会话不起作用

带分页的 Ajax 搜索 [Laravel]