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'])->name('search');
,而你的ajax正在使用post
方法你怎么说它是真的?
你说的是真的,我说这是我的错误,它是发布的,但我将其更改为获取然后复制的 id
输入php artisan route:list
然后找到路线并在这里发布给我看以上是关于Laravel:使用 ajax 搜索,路由无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
jquery .ajax函数与Laravel-4无法正常工作
如何在控制器laravel 8中通过ajax传递路由链接和图像存储链接