如何解决Laravel:使用ajax搜索,路线无法正常工作
我有Laravel Web App包含对数据库的搜索。 首先,我有这个输入:
<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','%'.$search."%")->get();
return json_nencode($questions);
}
解决方法
您的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);
}
});
,
在使用$ .ajax请求之前尝试添加此代码
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': "{{ csrf_token() }}"
}
});
让我知道它是否有帮助,并且在laravel官方文档中也有记录。 这是LINK
此后,您无需在$ .ajax请求中添加__token。
,非常感谢我通过这种方式解决了这个问题: 路线:
Route::get('/search'.'/{search}/{course}','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>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。