Laravel Ajax опубликовать данные - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть интернет-магазин, где я должен фильтровать товары по категориям.

Я должен опубликовать массив всех фильтров в контроллере, но я получаю эту ошибку

 "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>

web. php

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


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

Я пытаюсь показать все фильтры, поэтому я могу сделать запрос, чтобы получить все продукты на основе фильтров. Я создал скрипт, где я получаю все фильтры и хочу разместить его в контроллере. Пожалуйста, вы видите это? Спасибо

1 Ответ

0 голосов
/ 30 сентября 2019

прежде всего:

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

выше исключения происходят, когда маршрут не найден. NotFoundHttpException имеет статус 404

. В вашем коде вы передаете массив категорий в параметрах маршрута, что синтаксически неверно, поэтому не удалось найти маршрут.

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

со стороны внешнего интерфейса: passкатегории в качестве параметров запроса

url будет:

/ advanced_filter? queryParameter = идентификаторы выбранных категорий

/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 Illuminate\Http\Request;

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);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...