select2 программно установить значение по умолчанию ajax источник данных json - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть рабочий select2, который получает данные json с удаленного сервера через ajax. Мой сценарий таков: при первом открытии приложения пользовательский поиск выбирает выбор, после чего я помещаю его / ее выбор в переменную сеанса, поэтому я хочу любую последующую перезагрузку, чтобы: - прочитать переменную сеанса (сделано) - сделать вызов ajax, основываясь на сохраненном параметре сеанса, а не на том, какой пользователь вводит, и установить выбранный элемент как возвращаемое значение из ajax.

мой код:

$(document).ready(function() 
{
    $('#selectedEmployeeId').select2({
        dir: "rtl",
        width: '100%',
        placeholder: 'please type to search',
        minimumInputLength: 2,
        allowClear: true,
        ajax: {
        url: '<?= base_url() ?>employee/employees/get_all_employees_json',
        dataType: 'json',
        data: function (params) {
            return { search: params.term };
        },
        processResults: function (data) {
        // Tranforms the top-level key of the response object from 'items' to 'results'
        return { results: data };
        }


        },
        language: {
        // You can find all of the options in the language files provided in the
        // build. They all must be functions that return the string that should be
        // displayed.
            inputTooShort: function () {
                    return "at least 2 chars required";
                },

            noResults: function () {
                return 'no result';
            },
            "searching": function () {
                return 'searching...';
            }

        }
    }).on("select2:select", function (e) {
        if ($("#selectedEmployeeId").select2('val')) {
            var employee_id = $(this).select2('val');
            console.log('employee id: ' + employee_id);

            $.ajax({
                url: "<?= base_url() ?>employee/employees/updateCurrentEmployeeId",
                type: "post",
                data : {"selected_id" : employee_id,
                '<?php echo $this->security->get_csrf_token_name(); ?>' : '<?php echo $this->security->get_csrf_hash(); ?>'}

                })


            }
    });


});

ОБНОВЛЕНИЕ: Обход найден

Я решил поместить выбранный идентификатор, текст в переменные сеанса и поместить этот код в $(document).ready(function() :

//Check if there is a selected employee in session
    var Id= '<?php echo $session_value=(isset($_SESSION['currentEmployeeId']))?$_SESSION['currentEmployeeId']:''; ?>';
    var Name= '<?php echo $session_value=(isset($_SESSION['currentEmployeeName']))?$_SESSION['currentEmployeeName']:''; ?>';

    //If there is a selected emplpoyee, create option and get it selected
    if(Id != '' )
    {
        var option=jQuery("<option>").attr("value",Id).html(Name);
        $('#selectedEmployeeId').append(option);
        $('#selectedEmployeeId').val(Id).trigger('select2:select').trigger('change');
    }
...