Laravel как добавить Ajax json в выбранную опцию

#laravel

#laravel

Вопрос:

в чем проблема с моим кодом, он возвращает пустой выпадающий список. я хочу выпадающий список таблицы национальностей в профиле учителей.

Вид:

 <select class="form-control" name="nation_id" id="nation_id">
     <input type="hidden" name="teacher_nation_id" id="teacher_nation_id" 
      value="{{ @$teacher->nation_id}}">
</select>
  

ajax-код, который возвращает пустой выпадающий список: Ajax:

  <script>
    $(document).ready(function($){
        $.get('nations-list', function(data) {
            let teacher_nation_id = $('#teacher_nation_id').val();
            let nations = $('#nation_id');
            nations.empty();

            $.each(data, function(key, value) {
                nations.append("<option value='"  key  "'>"   value   "</option>");
            });

            nations.val(teacher_nation_id); 
        });
    });
    </script>
  

Мой контроллер:

 public function ajaxrequest(Request $request)
{

  $nations = Nation::all()->pluck('nation', 'id');

    return response()->json($nations);
}
  

Вот мой маршрут:
Маршрут:

 Route::get('nations-list','TeachersController@ajaxrequest');
  

Комментарии:

1. Можете ли вы показать мне результат данных, которые вы извлекаете через ajax.

Ответ №1:

Попробуйте это,

 <input type="hidden" name="teacher_nation_id" id="teacher_nation_id" 
  value="{{ @$teacher->nation_id}}">

<select class="form-control" name="nation_id" id="nation_id">
</select>

<select class="form-control" name="area" id="area">
</select>
  

Ajax-код:

 <script type="text/javascript">
$(document).ready(function($){
$('#nation_id').click(function($){
    var tid = $('#teacher_nation_id').val();
    if(tid){
        $.ajax({
           type:"get",
           url:"{{url('/getNation)}}/" tid,
           success:function(res)
           {    
                $('#nation_id').empty();
                $("#nation_id").append('<option>--Select Nation--</option>');
                if(res)
                {
                    $.each(res,function(key,value){
                        $('#nation_id').append($("<option/>", {
                           value: key,
                           text: value
                        }));
                    });
                }
           }

        });
    }
});
$('#nation_id).change(function(){
    var nid = $(this).val();
        if(nid){
        $.ajax({
           type:"get",
           url:"{{url('/getArea')}}/" nid,
           success:function(res)
           {     
                $("#area").empty();
                $("#area").append('<option>--Select Area--</option>');
                if(res)
                {
                    $.each(res,function(key,value){
                        $('#area').append($("<option/>", {
                           value: key,
                           text: value
                        }));
                    });
                }
           }

        });
        }
    });

});
</script>
  

Контроллер:

 public function getNation($id)
{
    $nations= DB::table("nations")
                ->where("teacher_nation_id",$id)
                ->pluck("nation","id")
                ->toArray();
    return response()->json($nations);    
}
public function getArea($id)
{
    $areas= DB::table("areas")
                ->where("nation_id",$id)
                ->pluck("area","id")
                ->toArray();
    return response()->json($areas);    
}
  

Маршрут:

 Route::get('/getNation/{id}','NationsController@getNation);
Route::get('/getArea/{id}','AriasController@getArea); 
//Here I assumes that You have different controller named AreasController you can gave name of your controller
  

Надеюсь, это будет полезно для вас..
Удачи…

Комментарии:

1. Спасибо, не могли бы вы, пожалуйста, рассказать мне, как загружать данные при выборе (select option), а не при готовности документа.

2. конечно.. итак, вам нужно, чтобы всякий раз, когда вы выбираете teacher из выпадающего списка, нации должны загружать этого учителя в другой выпадающий список .. верно?

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

4. хорошо, вы можете использовать событие щелчка. итак, когда вы нажмете на выпадающий список, вызов ajax будет выполнен.. если вы этого хотите, я могу изменить ответ.. должен ли я?

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