Пожалуйста, ознакомьтесь с официальной документацией: https://select2.org/data-sources/ajax
Вам нужна функция, которая будет обрабатывать параметры запроса, и другая функция, которая обрабатывает данные ответа.
Вы пробовали это?
Как использовать Select2 с JSON через Ajax-запрос?
EDIT:
Я создал здесь JSFIddle с вашим кодом: https://jsfiddle.net/7bdeo38c/6/
HTML:
<select class="js-example-basic-single" name="state"></select>
JS:
$(document).ready(function() {
$('.js-example-basic-single').select2(
{
ajax: {
url: 'https://jsonplaceholder.typicode.com/todos',
dataType: 'json',
data: function (params) {
return {
q: params.term // search term
};
},
processResults: function (data) {
return {
results: data // results
};
}
},
templateResult: formatResults, // Controls how the dropdown looks
templateSelection: formatSelection, // Controls what is displayed after selecting an item
escapeMarkup: function (m) { return m; }, // Let our custom formatter work
}
);
});
function formatResults (data) {
if (data.loading) {
return data.text;
}
var result;
if (data.completed) {
result = "<div class='select2-result-repository__description'>" + data.title + "</div>";
}
return result;
}
function formatSelection (data) {
return data.id + ' - ' + data.title || data.text;
}
Подобный пример существует в официальной документации Select2. См. Конец главы Ajax для полного кода примера репозитория GitHub.
https://select2.org/data-sources/ajax