Динамический выпадающий в Laravel 5.2 - PullRequest
0 голосов
/ 26 июня 2018

Как создать зависимый раскрывающийся список с помощью jquery, ajax и laravel?

Маршруты:

Route::get('get-study-programs/{faculties_id}', 'DisciplinaryResearchesController@getStudyPrograms');

Вид:

<div class="form-group {!! $errors->has('faculties_id') ? 'has-error' : '' !!}">
{!! Form::label('faculties_id', 'Faculty', ['class' => 'col-md-2 control-label']) !!}
<div class="col-md-6">
    {!! Form::select('faculties_id', \App\Faculty::pluck('name','id'), null,
    ['class' => 'js-selectize', 'placeholder' => 'Choose']) !!}
    <strong>{!! $errors->first('faculties_id', '<p class="help-block">:message</p>') !!}</strong>
</div>

<div class="form-group {!! $errors->has('study_program_id') ? 'has-error' : '' !!}">
{!! Form::label('study_program_id', 'Study Program', ['class' => 'col-md-2 control-label']) !!}
<div class="col-md-6">
    {!! Form::select('study_program_id', [], null,
    ['class' => 'js-selectize', 'placeholder' => 'Choose']) !!}
    <strong>{!! $errors->first('study_program_id', '<p class="help-block">:message</p>') !!}</strong>
</div>

Контроллер:

public function create()
{
    $listFaculties = Faculty::lists('name', 'id');
    return view('disciplinary_researches.create', compact('listFaculties'));
}

public function getStudyPrograms($faculties_id)
{
    $studyPrograms = StudyProgram::where('faculties_id', $faculties_id)->pluck('name', 'id');
    $list = '';
    foreach ($studyPrograms as $key => $value) {
        $list .= "<option value='" . $key . "'>" . $value . "</option>";
    }

    return $list;
}

JavaScript:

<script type="text/javascript">
$('#faculties_id').on('change', function () {
    getStudyPrograms($(this).val());
});
function getStudyPrograms(faculties_id) {
    $.get('{{ url('/get-study-programs')}}/'+faculties_id, function (data) {
        $("#study_program_id").html(data);
    });
}
$(document).ready(function () {
    getStudyPrograms($('#faculties_id').val());
});

но при запуске кода выше я обнаружил ошибку в GET http: // localhost / get-study-programs 404 (Not Found), и это исходный URL http://localhost/lab/public/disciplinary-research/create, что не так в моем коде выше? спасибо, кто ответил, и это очень полезно

1 Ответ

0 голосов
/ 26 июня 2018

Вы объявили маршрут с обязательным параметром, но в вашем примере вы не передаете идентификатор в аргументе.

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

Route::get('get-study-programs/{faculties_id?}', 'DisciplinaryResearchesController@getStudyPrograms');

Поэтому вы сможете получить доступ к обоим путям:

http://localhost/get-study-programs

и

http://localhost/get-study-programs/1

EDIT:

Я тоже думал, что ниже может работать на вас @Agus:

Маршрут:

Route::get('faculties', 'DisciplinaryResearchesController@create');

Route::get('get-study-programs/{faculties_id?}', 'DisciplinaryResearchesController@getStudyPrograms');

Контроллер (Вместо создания моделей я использовал образцы массивов):

public function create()
{
    $listFaculties = [
        [
            "name1" => 1
        ],
        [
            "name2" => 2
        ],
        [
            "name3" => 3
        ]
    ];
    return view('dr', $listFaculties);
}

public function getStudyPrograms($faculties_id="")
{
    $studyPrograms = [["name" => "name".rand(0, 100), "id" => 1], ["name" => "name".rand(0, 100), "id" => 2]];
    $list = '';
    foreach ($studyPrograms as $key => $value) {
        $list .= "<option value='" . $value['id'] . "'>" . $value['name'] . "</option>";
    }

    return $list;
}

Файл представления и код JS будут такими, какими вы их разместили, и AJAX отлично работает для меня.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...