без выбора категории не показывать подкатегорию - PullRequest
0 голосов
/ 27 января 2019

Это файл create.blade.php.Сюда входят также файлы css и js. HTML-код и файл представления кода ajax

@extends('layouts.app')

@section('content')
 <link rel="stylesheet" href="http://www.codermen.com/css/bootstrap.min.css">    
 <script src="http://www.codermen.com/js/jquery.js"></script>
<form enctype="multipart/form-data" method="post" action="{{route('post.store')}}" >
       @csrf
       <div class="form-group col-md-8">
                    Category<select name="category" id="category" class="form-control">
                                    <option>select</option>
                        @foreach($categories as $category)
                <option value="{{$category->id}}">{{$category->category}}</option>
                @endforeach
                            </select>
       </div>
       <div class="form-group col-md-8">
                    Category<select name="subcategory" id="subcategory" class="form-control">
                                    <option>select</option>
                        @foreach($subcategories as $subcategory)
                <option value="{{$subcategory->id}}">{{$subcategory->subcategory}}</option>
                @endforeach
                            </select>
       </div>
</form>

@endsection


 

Это код контроллера, который создает код функции категории и подкатегории

public function create(Request $request){
    $categories = Category::all();
    $subcategories = DB::table('subcategories')
                        ->where('category_id', $request->category_id)
                        ->pluck('subcategory', 'id');
  return view('post.create', compact('categories', 'subcategories'));
}

Это маршрут

Route::get('/post/create', 'PostController@create')->name('post.create');

Проблема заключается весли я выбираю категорию, все еще не отображается, связанная с подкатегорией Here show output

This is my category table

This is my subcategory table

Ответы [ 2 ]

0 голосов
/ 27 января 2019

вы сделали глупую ошибку, вы отправляете ajax-запрос на изменение выпадающего списка выбора категории в вашу функцию создания, в то время как ваша функция создания отображает представление post.create вместо возврата ответа json на запрос ajax.

так что теперь вы можете сделать? Вам доступны 2 варианта:

вариант 1: создайте другую функцию с именем "get_subcategory_by_category_id", которая будет возвращать подкатегории в json, а также создайте новый маршрут в маршрутах / web.php для того же.

вариант 2: laravel предоставляет $request->ajax(), чтобы обнаружить, что запрос является ajax или нет? так что используйте это и ответьте в json, чтобы получить ответ.

public function create(Request $request){
    $categories = Category::all();
    $subcategories = DB::table('subcategories')
                        ->where('category_id', $request->category_id)
                        ->pluck('subcategory', 'id');

    if($request->ajax()){
        $response=array('categories'=>$categories,'subcategories'=>$subcategories);
        return response()->json($response,200);
    }
    return view('post.create', compact('categories', 'subcategories'));
}

ваша функция ajax должна быть такой:

<script type="text/javascript">
    $(document).on('change','#category',function(){
    var categoryID = $(this).val();    
    if(categoryID){
        $.ajax({
           type:"GET",
           url:"{{url('create')}}?category_id="+categoryID,
           dataType:'json',
           success:function(res){               
            if(res){
                console.log(res);
                // forloop through subcategory and append 
            }else{
               $("#subcategory").empty();
            }
           }
        });
    }else{
        $("#subcategory").empty();

    }      
   });
</script>

убедитесь, что ваш URL-адрес запроса правильный, также проверьте Inspect Element> вкладка Network для ответа на ajax-запрос.

0 голосов
/ 27 января 2019

Код добавления в jquery выглядит так, как будто он правильный.Я думаю, что проблема может быть в вашей маршрутизации.

Вы получили

url:"{{url('create')}}?category_id="+categoryID,

как запрос GET, вызываемый через метод Laravel url().Это может помочь, если вы используете url() здесь так, как вы настроили маршрут в web.php, который использовал бы полный путь URL:

url:"{{url('post/create/')}}"+categoryID,

Это позволяет добавить функцию url ()параметр.Однако, это также может помочь учесть входящий параметр в вашем файле маршрутов, если это запрос GET (и добавить $ category_id к методу контроллера):

Route::get('post/create/{id}', 'PostController@create')

Я бы, вероятно, сделал бы отдельную функцию просточтобы получить подкатегории - затем вызовите эту функцию с помощью ajax и просто вытяните подкатегории.Немного чище.

Но я думаю, что ваша проблема, возможно, связана с маршрутизацией, и, возможно, некоторые из вышеперечисленных помогут вам.

...