Javascript Laravel:使用ajax进行搜索,路由don';我不能正常工作

Javascript Laravel:使用ajax进行搜索,路由don';我不能正常工作,javascript,ajax,laravel,routes,controller,Javascript,Ajax,Laravel,Routes,Controller,我有一个Laravel web应用程序包含数据库搜索。 首先,我有这个输入: <input class="form-control mr-sm-2" type="text" id="search_me" placeholder="{{__('home.Search')}}" aria-label="Search" onkeyup="myFunction()"> &

我有一个Laravel web应用程序包含数据库搜索。 首先,我有这个输入:

<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}}">
以及控制器方法:

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);
    }
现在,当我键入输入文本时,我得到:

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

                  $.ajax({
                        method : 'GET',
                        url : "{{route ('search')}}",
                        dataType : 'json',
                        data:{
                            'search_data':search_me , 
                            'course_id':id,
                            },
                        
                        success:function(data){
                        console.log(data); 
                        }
                    });  
将路线更改为
post

Route::post('/search', [App\Http\Controllers\user\User_controller::class, 'search_data'])->name('search');
或者您的ajax来
获取

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

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

  $.ajaxSetup({
    headers: {
     'X-CSRF-TOKEN': "{{ csrf_token() }}"
   }
});
让我知道它是否有帮助,它也记录在官方的laravel文档中。 这是你的电话号码


在此之后,您不需要在$.ajax请求中添加uu令牌。

谢天谢地,我通过以下方式解决了这个问题: 路线:

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

    <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>
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>
函数myFunction(id){
var search_me=document.getElementById('search_me').value;
var route=“{{URL::to('search')}”+'/'+search_me+'/'+id;
如果(搜索我!=“”){
$.get(路由、功能(数据、状态){
控制台日志(数据);
});
}
}

这是您的路线
route::get('/search',[App\Http\Controllers\user\user\u controller::class,'search\u data'])->name('search')
你的ajax使用的是
post
方法,你怎么说它是真的?你说是真的,我说是我的错,它是post,但我改变了它,然后复制了idtype
php artisan route:list
然后找到路由并发布到这里让我看看我把它放在ajax请求之前,我得到以下信息:ReferenceError:beayMLh3LrjWSAvKQRuTm465iMGmMaJUKM2h8Oqg未定义我已更新我的回复,之前的回复中存在错误