У меня есть рабочий 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');
}