I'd like to use Select2 for a select box, populated by an ajay query to an api with a single call to the api. There is no need to query the api again after every keystroke.
I tried to implement it using this thread: How to pre-load an array via ajax and use it for select2? but I still cannot get it to work after hours -.-
My code:
<script type="text/javascript">
$(document).ready(function() {
var linkableSystems = [];
$.ajax({
url: 'ulrHere'
}).done(function(data) {
linkableSystems = data.results;
console.log(linkableSystems);
$('#SelectLinkedSystemToAdd').select2('enable', true);
});
$('#SelectLinkedSystemToAdd').select2({
dataType: 'json',
data: function () { return { results: linkableSystems }; }
},
console.log(linkableSystems)
).select2('enable', false);
});
</script>
<select id="SelectLinkedSystemToAdd" class="form-control"></select>
The api returns:
{
"results": [
{
"text": "demo CLIENT 1",
"id": 1
},
{
"text": "demo CLIENT 2",
"id": 2
}
]
}
I tried to populate the select box with the select2 ajax call and it works. But I cannot get it to work so that it only does 1 single api call.
According to the console, linkableSystems is empty at first:
[]
length: 0
and then filled by the ajax request:
(2) […]
0: Object { text: "demo CLIENT 1", id: 1 }
1: Object { text: "demo CLIENT 2", id: 2 }
Sadly, these changes are not picked up by Select2 as suggested in the thread I linked above.
Can anyone please help me with this? If you need any more information, please ask!
Thanks!
Keep in mind that these requests are asynchronous.
Should do the trick, since you update the select2 when the data actually is available. In case you initiliazed the select2 before it's a bit iffy sometimes. You might have to do
$('#SelectLinkedSystemToAdd').select2('destroy')and reinit the select with the data again.