#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. да, пожалуйста, это было бы благодарно, не могли бы вы также сказать мне, если я тоже хочу получить выпадающий список области, какие изменения мне нужно будет внести в ваш код, пожалуйста, отредактируйте ответ, и я отмечу как принятый ответ, извините за беспокойство, спасибо