没有选择类别不显示子类别

时间:2019-01-27 05:29:53

标签: laravel laravel-5 laravel-4 eloquent laravel-5.2

这是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 :(得分:0)

jquery附加代码看起来像是正确的。我认为问题可能出在您的路由上。

您已经

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

作为通过Laravel方法url()调用的GET请求。如果您以在web.php中设置路由的方式在此处使用url(),则可能会有所帮助,它将使用完整的URL路径:

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

这使url()函数可以添加参数。但是,如果它是GET请求,则也可能有助于解决路由文件中的传入参数(并将$ category_id添加到控制器方法中):

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

我可能会制作一个单独的函数只是为了获取子类别-然后对该函数进行ajax调用并仅提取子类别。清洁一点。

但是我认为您的问题可能出在路由上,也许上述某些方面可以帮助您。

答案 1 :(得分:0)

您犯了一个愚蠢的错误,您正在向create函数发送有关类别选择下拉列表的ajax请求,而create函数正在呈现视图post.create而不是对ajax请求返回json响应。

那么现在您能做什么? 2种可用选项:

选项1:创建另一个名为“ get_subcategory_by_category_id”的函数,该函数将返回json中的子类别,也将在routes / 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>

确保您的请求网址正确,还检查“检查元素”>“网络”选项卡以获取ajax请求响应。