Laravel ajax post data



我有一个电子商务商店,我必须按类别过滤产品。

我必须在控制器中发布所有过滤器的数组,但是我收到此错误

"message": "",
"exception": "Symfony\Component\HttpKernel\Exception\NotFoundHttpException",
"file": "C:\xampp\htdocs\web_front\vendor\laravel\framework\src\Illuminate\Routing\RouteCollection.php",
"line": 179

这是我的代码:

<script>
$(document).ready(function () {
var categories = [];
$('input[name="cat[]"]').on('change', function (e) {
e.preventDefault();
categories = []; // reset
$('input[name="cat[]"]:checked').each(function()
{
categories.push($(this).val());
});

$.ajax({
type:"GET",
url:'advanced_filter/' + categories,

success:function(data){
console.log(data);
},
error: function(xhr,errmsg,err)
{
console.log(xhr.responseText);
}
});
});
});
</script>

网络.php

Route::get('advanced_filter/{filters}', 'HomepageController@advanced_filter')->name('advanced_filter');

public function advanced_filter($filters)
{
dd($filters);
}

我正在尝试显示所有过滤器,因此我可以进行查询以基于过滤器获取所有产品。我已经创建了脚本,我可以在其中获取所有过滤器,并希望将其发布在控制器中。 拜托,你能看到这个吗?谢谢

首先:

"exception":"Symfony\Component\HttpKernel\Exception\NotFoundHttpException",

当找不到路由时,会发生上述解释。NotFoundHttpException 的状态为 404

在你的代码中,你在路由参数中传递类别数组,这在语法上是错误的,所以这就是找不到路由的原因。

Route::get('advanced_filter', 'HomepageController@advanced_filter')->name('advanced_filter');

从前端:将类别作为查询参数传递

网址将是 :

/advanced_filter?查询参数= 所选类别的 id

/advanced_filter?categories=1,3,7

您的 AJAX 函数将是:

$.ajax({
type:"GET",
url:`/advanced_filter?categories=${categories.join(',')}`,
success:function(data){
console.log(data);
},
error: function(xhr,errmsg,err){
console.log(xhr.responseText);
}
});

在您的控制器中:

use IlluminateHttpRequest;
public function advanced_filter(Request $request)
{
$filter_categories=[];
if($request->has('categories')){
$filter_categories=$request->query('categories');
}
/* you can pass extra query parameter like sortBy,sortOrder,limit  in url 
`/advanced_filter?categories=1,3,7&limit=24&sortBy=name&sortOrder=desc`
*/
$sortBy=$request->has('sortBy')?$request->query('sortBy'):'id';
$sortOrder=$request->has('sortOrder')?$request->query('sortOrder'):'desc';
$limit = $request->has('limit')?$request->has('limit'):12;
/* assuming you have models with relations */
$query = Products::query();
$query->with('categories');
if(count($filter_categories)>0){
$query->whereHas('categories', function ($q) use ($filter_categories) {
$q->whereIn('categories.id',$filter_categories);
});
}
$query->orderBy($sortBy,$sortOrder);
$products = $query->paginate($limit);
return response()->json($products);
}

最新更新