Laravel依赖选择

时间:2019-02-08 22:52:06

标签: javascript sql-server ajax laravel

我已经为此苦苦挣扎了好几天。我必须选择框。一个用于部门,另一个用于部门。代码是:

路线:

enter image description here

查看字段:

enter image description here

控制器:

enter image description here

Javascript:

enter image description here

当我单击第一个选择时,我可以获取相关部分,但选择的部分不会追加。我究竟做错了什么?我正在使用Laravel和SQL Server实施此解决方案。

1st department

2nd department

感谢所有帮助。干杯,并保持良好的工作:)。

2 个答案:

答案 0 :(得分:1)

几个月没有机会使用Laravel之后,我花了一些时间解决此问题。我想有3个组合框(国家,地区,县),它们依赖于该国家/地区的葡萄牙。下图中记录了我实施的解决方案。如果您有任何疑问,请随时提出。我知道这不是完美的解决方案,但这就是我设法得到的:)。谢谢,继续努力。

路线:

//Listas (Distritos e Concelhos)
Route::get('/website/candidaturas/obterlistadistritos','Oportunidades\RecrutamentoController@obterListaDistritos');
Route::get('/website/candidaturas/obterlistaconcelhos','Oportunidades\RecrutamentoController@obterListaConcelhos');

查看字段:

<label for="paisCandidatura">País</label>
<select onChange="" class="form-control {{ $errors->has('paisCandidatura') ? 'is-invalid' : '' }}" id="paisCandidatura" name="paisCandidatura">

<option value=""></option>
    @foreach($paises as $pais)
        @if($pais->id == old('paisCandidatura'))
            <option value="{{$pais->id}}" selected>{{$pais->nome}}</option>
        @else
            <option value="{{$pais->id}}">{{$pais->nome}}</option>
        @endif
    @endforeach

</select>
@if($errors->has('paisCandidatura'))
    <div class="invalid-feedback">{{ $errors->first('paisCandidatura') }}</div>
@endif

<label for="distritoCandidatura">Distrito</label>
<select onChange="" class="form-control {{ $errors->has('distritoCandidatura') ? 'is-invalid' : '' }}" id="distritoCandidatura" name="distritoCandidatura">
    <option value =""></option>
    @if(old('paisCandidatura') == 141)

        @foreach($distritos as $distrito)

            @if($distrito->id == old('distritoCandidatura'))
                <option value="{{$distrito->id}}" selected>{{$distrito->nome}}</option>
            @else
                <option value="{{$distrito->id}}">{{$distrito->nome}}</option>
            @endif

        @endforeach

    @endif

</select>
@if($errors->has('distritoCandidatura'))
    <div class="invalid-feedback">{{ $errors->first('distritoCandidatura') }}</div>
@endif

<label for="concelhoCandidatura">Concelho</label>
<select onChange="" class="form-control {{ $errors->has('concelhoCandidatura') ? 'is-invalid' : '' }}" id="concelhoCandidatura" name="concelhoCandidatura">
    <option value =""></option>
    @if(old('paisCandidatura') == 141)

        @foreach($concelhos as $concelho)

            @if($concelho->id == old('concelhoCandidatura'))
                <option value="{{$concelho->id}}" selected>{{$concelho->nome}}</option>
            @else
                <option value="{{$concelho->id}}">{{$concelho->nome}}</option>
            @endif

        @endforeach

    @endif

</select>
@if($errors->has('concelhoCandidatura'))
    <div class="invalid-feedback">{{ $errors->first('concelhoCandidatura') }}</div>
@endif

控制器:

    /**
     * Return a list of districts associated to a country
     */
    public function obterListaDistritos(Request $request)
    {
        $distritos = Distrito::all()
        ->where("pais_id",$request->pais_id)
        ->pluck("nome","id");
        return response()->json($distritos);
    }

    /**
     * Return a lista of councils associated to a district
     */
    public function obterListaConcelhos(Request $request)
    {
        $concelhos = Concelho::all()
        ->where("distrito_id",$request->distrito_id)
        ->pluck("nome","id");
        return response()->json($concelhos);
    }

Javascript:

    <script type="text/javascript">
        $('#paisCandidatura').change(function(){
        var paisCandidatura = $(this).val();    
        if(paisCandidatura){
            $.ajax({
               type:"GET",
               url:"{{url('/candidaturas/obterlistadistritos')}}?pais_id="+paisCandidatura,
               success:function(res){               
                if(res){
                    $("#distritoCandidatura").empty();
                    $("#distritoCandidatura").append('<option value=""></option>');
                    $("#concelhoCandidatura").empty();
                    $("#concelhoCandidatura").append('<option value=""></option>');
                    $.each(res,function(key,value){
                        $("#distritoCandidatura").append('<option value="'+key+'">'+value+'</option>');
                    });
               
                }else{
                   $("#distritoCandidatura").empty();
                   $("#concelhoCandidatura").empty();
                }
               }
            });
        }else{
            $("#distritoCandidatura").empty();
            $("#concelhoCandidatura").empty();
        }      
       });
       
        $('#distritoCandidatura').on('change',function(){
        var distritoCandidatura = $(this).val();    
        if(distritoCandidatura){
            $.ajax({
               type:"GET",
               url:"{{url('/candidaturas/obterlistaconcelhos')}}?distrito_id="+distritoCandidatura,
               success:function(res){               
                if(res){

                    $("#concelhoCandidatura").empty();
                    $("#concelhoCandidatura").append('<option value=""></option>');
                    $.each(res,function(key,value){
                        $("#concelhoCandidatura").append('<option value="'+key+'">'+value+'</option>');
                    });
               
                }else{

                   $("#concelhoCandidatura").empty();

                }
               }
            });
        }else{

            $("#concelhoCandidatura").empty();
            
        }
            
       });
    </script>

结果:

enter image description here

enter image description here

enter image description here

答案 1 :(得分:0)

要在laravel中返回json,您应该写

return response()
        ->json($seccoes);

我建议您使用eloquent,它将使代码的可读性更强。