В чем ошибка в моем коде я новичок в ajjax - PullRequest
1 голос
/ 19 февраля 2020

Я хочу создать зависимый выпадающий список, используя ajjax. Я не могу узнать свою ошибку. Пожалуйста, помогите мне узнать мою ошибку. При выборе специальности показать фамилию врача по специальности. Но я не могу этого сделать. Это мой маршрут. php

Route::get('/admin/appointment/view/{id}', 'AppointmentController@appointmentView'); Route::get('/admin/appointment/speciality', 'AppointmentController@doctorView')->name('admin.appointment.speciality');

My Appointment Controller

public function doctorView(Request $request)
    {
        $data=Doctor::select('doctor_name','doctor_specialty')->where('doctor_specialty',$request->speciality)->take(100)->get();
        return response()->json($data);//then sent this data to ajax success

    }

Просмотр файла:

<div class="form-group">
     <label for="inputState" class="col-form-label">Doctor Speciality</label>
     <select name="speciality" id="speciality" class="form-control doctor_speciality" data-dependent="state">
      <option value="">Select Speciality</option>
       @foreach($specialityLists as $specialityList)
       <option value="{{$specialityList->speciality}}">{{$specialityList->speciality}}</option>
       @endforeach
        </select>
     </div>

 <div class="form-group">
   <label for="inputState" class="col-form-label">Doctor Name</label>
   <select name="doctors_name" id="doctors_name" class="form-control doctor_name " >
   <option value="0" selected="true">Choose Doctor Name</option>
       </select>
 </div>

Файл сценария:

$(document).ready(function(){

 $(document).on('change','.doctor_speciality',function(){
            // console.log("hmm its change");
            var speciality_id = $(this).val();
            // console.log(speciality_id);
            var div=$(this).parent();
            var op=" ";
            $.ajax({
                type:'get',
                url: '{!!URL::to('/admin/appointment/speciality')!!}',
                data:{'id':speciality_id},
                success:function(data){
                    // console.log('success');
                    // console.log(data);
                    // console.log(data.length);
                    op+='<option value="0" selected disabled>Choose Doctor</option>';
                    for(var i=0;i<data.length;i++){
                    op+='<option value="'+data[i].doctor_specialty+'">'+data[i].doctor_name+'</option>';
                         }
                    div.find('.doctor_name').html(" ");
                   div.find('.doctor_name').append(op);
                },
                error:function(){
                }

            });
    });

});

1 Ответ

0 голосов
/ 19 февраля 2020

Позвольте мне прояснить вам ....

Измените свой маршрут с помощью post

Route::post('/admin/appointment/speciality', 'AppointmentController@doctorView')->name('admin.appointment.speciality');

Теперь ваша ajax часть

$(document).ready(function(){

$(document).on('change','.doctor_speciality',function(){
        var speciality_id = $(this, 'option:selected').val();
        $.ajax({
            type:'post',
            url: "{{ route('admin.appointment.speciality') }}",
            data:{speciality:speciality_id,_token:@json(csrf_token())},
            success:function(data){
                // console.log(data);
                var op ='<option value="0" selected disabled>Choose Doctor</option>';
                $.each(data,function(key,value){
                  op+='<option value="'+value.doctor_specialty+'">'+value.doctor_name+'</option>';
                });
                $('.doctor_name').empty().append(op);
            },
            error:function(data){
             console.log(data);
            }

        });
   });

});

Если у вас есть связь «один ко многим» с таблицей «доктор», тогда, по вашему мнению, измените это.

   @foreach($specialityLists as $specialityList)
     <option value="{{$specialityList->id}}">{{$specialityList->speciality}}</option>
   @endforeach

И в контроллере сделайте что-то подобное ...

public function doctorView(Request $request)
{
    //Here doc_spec_id will be your foreign key
    //$request->speciality this will be your specialitylist primary key
    return Doctor::select('doctor_name','doctor_specialty')->where('doc_spec_id',$request->speciality)->take(100)->get();

    OR

    //If $request->speciality is like a name mean to say string then write LIKE Query
    return Doctor::select('doctor_name','doctor_specialty')->where('doctor_specialty','LIKE','%'.$request->speciality.'%')->take(100)->get();

}

Если данные null Конечно, вы можете написать checks et c ...

...