Laravel:使用 ajax 搜索,路由无法正常工作

Posted

技术标签:

【中文标题】Laravel:使用 ajax 搜索,路由无法正常工作【英文标题】:Laravel : Search with ajax ,route don't work correctly 【发布时间】:2021-01-27 19:22:51 【问题描述】:

我有 Laravel 网络应用程序包含对数据库的搜索。 首先我有这个输入:

<input class="form-control mr-sm-2" type="text"  id="search_me" placeholder="__('home.Search')" aria-label="Search" onkeyup="myFunction()">
<input type="hidden" id="course_id" value="$course->id">

所以我创建了这个 javascript 函数:

    <script>
        function myFunction() 
            var search_me=document.getElementById('search_me').value;
            var id=document.getElementById('course_id').value;

                    $.ajax(
                        method : 'POST',
                        url : "route ('search')",
                        dataType : 'json',
                        data:
                            '_token':'csrf_token()',
                            'search_data':search_me , 
                            'course_id':id,
                            ,
                        
                        success:function(data)
                        console.log(data); 
                        
                    );  
        
</script>

然后我创建这样的路线:

Route::get('/search', [App\Http\Controllers\user\User_controller::class, 'search_data'])->name('search');

和控制器方法:

public function search_data(Request $request)

        $output="";
        $questions = Question::table('questions')->where('course_id',$request->course_id)->where('question' ,'LIKE' ,'%'.$request->search_data."%")->get();
        return json_nencode($questions);


当我在文本输入中输入时出现错误:

main.js?attr=DEbA4C86cFywU9oORVUcm4fay4bVMB7MeKBvEkL0Iy2jpADxMlMEszxyl6A-4lWVGp58XG2e-YEmLqgl2mGpQg:1078 POST http://127.0.0.1:8000/ku/search 405 (Method Not Allowed)

在这个错误中我发现了这个:

        return fun.apply(this, [].slice.call(arguments));

我遵循了很多这样的例子,我不知道我的错误在哪里?

更新

我做了一些改变: 我将 ajax 请求更改为:

var route = 'route("search"'+'/'+search_me+'/'+id;
     $.get(""+route+"", function(data,status)
                    console.log( data );
                );

我也改变了获得的路线。 然后我将控制器更改为:

public function search_data($search , $id)
    

            $output="";
            $questions = Question::table('questions')->where('course_id',$id)->where('question' ,'LIKE' ,'%'.$search."%")->get();
            return json_nencode($questions);
    

现在,当我键入输入文本时,我得到了这个:

【问题讨论】:

【参考方案1】:

在使用 $.ajax 请求之前尝试添加此代码

  $.ajaxSetup(
    headers: 
     'X-CSRF-TOKEN': " csrf_token() "
   
);

如果它有帮助,请告诉我,它也记录在官方 laravel 文档中。 这是LINK

此后,您无需在 $.ajax 请求中添加 __token。

【讨论】:

我把它放在ajax请求之前,我得到这个:ReferenceError: beayMLh3LrjWSAvKQRuTm465iMGmMaJUKM2h8Oqg is not defined 我已经更新了我的回复,之前有一个错误【参考方案2】:

谢天谢地,我通过这种方式解决了它: 路线:

Route::get('/search'.'/search/course', [App\Http\Controllers\user\User_controller::class, 'search_data'])->name('search');

js函数:

function myFunction(id) 
            var search_me=document.getElementById('search_me').value;
            var route = "URL::to('search')"+'/'+search_me+'/'+id;
            if(search_me != "")
                $.get(route, function(data,status)
                    console.log(data);
                );
            
        
    </script>

【讨论】:

【参考方案3】:

您的 ajax 方法是 post,但您的路线是 get

将路由更改为post

Route::post('/search', [App\Http\Controllers\user\User_controller::class, 'search_data'])->name('search');

或者你的 ajax 到 get

                  $.ajax(
                        method : 'GET',
                        url : "route ('search')",
                        dataType : 'json',
                        data:
                            'search_data':search_me , 
                            'course_id':id,
                            ,
                        
                        success:function(data)
                        console.log(data); 
                        
                    );  

【讨论】:

这是你的路线Route::get('/search', [App\Http\Controllers\user\User_controller::class, 'search_data'])-&gt;name('search');,而你的ajax正在使用post方法你怎么说它是真的? 你说的是真的,我说这是我的错误,它是发布的,但我将其更改为获取然后复制的 id 输入php artisan route:list 然后找到路线并在这里发布给我看

以上是关于Laravel:使用 ajax 搜索,路由无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 中调用 ajax 后数据表无法正常工作

jquery .ajax函数与Laravel-4无法正常工作

如何在控制器laravel 8中通过ajax传递路由链接和图像存储链接

无法在 Laravel/Vue.Js 中执行 Ajax 请求

Laravel Ajax 路由问题(404 响应)

Laravel + Vue.js 应用程序路由无法正常工作