Select2 Ajax Laravel — результаты не отображаются

JS

$("#location").select2({
ajax: {
url: "/search/locations",
dataType: 'json',
delay: 250,
data: function (params) {
return {
q: params.term, // search term
};
},
processResults: function (data) {
return {
results: data
};
},
cache: true
},
minimumInputLength: 1,
placeholder: function(){
$(this).data('placeholder');
}
});

контроллер

 public function searchLocations()
{
$q = Input::get('q');
$results = Location::where('suburb', 'LIKE', '%'. $q . '%')
->orWhere('state', 'LIKE', '%'. $q . '%')
->orWhere('postcode', 'LIKE', '%'. $q . '%')
->get();
return Response::json( $results );
}

Я вижу, как выполняется запрос ajax и что он получает данные обратно, но он не показывает результаты. Я использую последнюю версию Select2 (v4.0.2)

1

Решение

Когда вы загружаете пользовательские данные из удаленного источника, Select2 обычно не знает, что с ними делать. Вам нужно будет указать, как форматировать каждый результат, установив templateSelection для параметров и templateResult для выбранной опции, например так:

function locationResultTemplater(location) {
return location.suburb + " " + location.state + " " + location.postcode;
}

function locationSelectionTemplater(location) {
if (typeof location.suburb !== "undefined") {
return locationResultTemplater(location);
}
return location.text; // I think its either text or label, not sure.
}
$("#location").select2({
ajax: {
url: "/search/locations",
dataType: 'json',
delay: 250,
data: function (params) {
return {
q: params.term, // search term
};
},
processResults: function (data) {
return {
results: data
};
},
cache: true
},
minimumInputLength: 1,
placeholder: function(){
$(this).data('placeholder');
},
templateResult: locationResultTemplater,
templateSelection: locationSelectionTemplater

});

Обратите внимание, что для возврата HTML-разметки вместо простого текста вам нужно, чтобы функция шаблона возвращала селектор объекта jQuery, например, return $("<div class='styleme'>Content</div>);

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]